domingo, 23 de novembro de 2008

sábado, 15 de novembro de 2008

21 coisas que precisamos saber de cor sobre o cakephp

http://www.avatarfinancial.com/pages/cake/

Um caroço no meu bolo : 2147483647

Salaam.
Não sei ao certo por onde começar rs.

Tive um problema quando precisei determinar um valor numérico aleatório para um campo no meu banco de dados.

Mas me deparei com o seguinte problema, o registro que aparecia no banco era sempre o seguinte número : 214783647

Como sempre acredito que o problema está entre a cadeira e o teclado, comecei a revisar a minha função. Ela funcionava perfeitamente.

Como é possível eu determinar uma entrada e me aparecer outra no banco?

Simples, o problema é o PHP_INT_MAX

Acredito que tenha ocorrido um problema no momento em que usei expressões regulares para tratar um valor retornado por um md5.

http://www.yqed.com/php-32bits-2147483647/

Otimizando a receita

Só para constar, nesse blog tem uma boa explicação do uso do compact.

http://www.littlehart.net/atthekeyboard/2007/08/07/stupid-cakephp-controller-tricks/

Basicamente, este serve para deixar o código mais legível..e se essas coisas existem por que não usá-las??


  1. $this->set('user', $this->User->read(null, $id));
  2. $this->set('foo', $foo);
  3. $this->set('bar', $bar);
  4. $this->set('baz', $baz);
Isso tudo aí em cima pode ser resumido a isto:

  1. $user = $this->User->read(null, $id);
  2. $this->set(compact('user', 'foo', 'bar', 'baz'));
Bem, o que ocorre é que nos bastidores é que será feita uma identificação entre o nome que você estabeleceu como parâmetro e as variáveis em uso que possuem o mesmo nome.

Na cozinha

Bem, não posso ficar sem relatar o andamento do meu aprendizado.

Depois de ter conseguido configurar o bake, testei várias vezes os tipos de relacionamentos disponíveis no cake. Fiz de tudo, rs..acho que até tentei fazer o impossível.

Testei um por um, e vi também como eles eram retornados no view..edit..etc.

Agora que já estou satisfeita com o modelo relacional supimpa, tenho que fazer algumas mudanças para que meu CRUD funcione como eu havia planejado..

Estou lendo sobre os helpers e etc..resolvi deixar a validação para depois de ajustar o meu CRUD. Espero que seja uma atitude correta, se algum veterano ler isso e puder me dar um conselho, por favor o faça. Sou muito grata =)

Ah sim, já ia esquecendo: http://manual.cakephp.com.br/doku.php?id=forms

Bom proveito por que eu já o fiz.

terça-feira, 11 de novembro de 2008

Bake, CakePHP, EasyPHP

Aqui vão alguns links para ajudar a rodar o Bake :

http://www.janisb.com/blog/2008/01/running-with-cake/

http://cakephp.org/screencasts/view/6

Com esses dois tutoriais consegui configurar o ambiente para fazer o bake funcionar direitinho no windows.

Tive uma certa dificuldade e no final solucionei meus problemas com a dica de mover as DLLs da pasta do php para o system32.

Grande abraço.

quinta-feira, 6 de novembro de 2008

CakePhp - Por que models são no singular e controllers são no plural?

No incício do desenvolvimento da aplicação devemos respeitar algumas regras para que o Cake deva funcionar como esperamos.

Primeiro criamos uma tabela em nosso banco de dados. Esta tabela deve ser nomeada em minúsculo e deve estar noplural. Por exemplo: items

Depois criamos um arquivo model, este deve ser nomeado no singular: item.php. o nome da classe também no singular"class Item" seguido do atributo da variável name "var $name = 'Item'".

Depois é o momento do controller. Este sim deve estar no plural como o nome da tabela: "ItemsController" e deve possuir o atributo name no plural também "var $name = 'Items'". O arquivo será items_controller.php

Quando você solicitar uma ação para sua aplicação (ação de adicionar um registro na tabela items) você deverá indicar ao Cake para qual tabela a ação é referenciada, isso se faz relacionando o controller (responsável pelas ações) à tabela. O Cake é capaz de fazer esta relação através das correspondências entre os nomes dos controllers e das tabelas.

No caso do model, colocamos a indicação no singular pois este deve ser visto como uma instância da tabela. Por exemplo, no caso, o model representa um único registro da tabela items. Ele é singular, não é um conjunto de registros.É m objeto que consequentemente é entendido como a instância de uma classe (no caso, items).

CakePhp - por onde começar

Entender o conceito de como o Cake funciona foi um pouco complicado até uns dias atrás..
Confesso que não busquei a melhor maneira para começar a aprender..
Buscando evitar o susto do "primeiro contato" perguntei a alguns amigos da faculdade como instalar, pois nem isso eu imaginava como poderia ser..
Fugindo do manual no site oficial futuquei o Google em busca de tutoriais que mostravam os primeiros passos. Graças que existe o Tulio Faria que me orientou bem com os vídeos tutoriais...

Bem, para quem nunca saiu da casca do desenvolvimento de sites com códigos entranhados em HTML e quem nunca teve contato com Orientação a Objeto (O.O.), entender o funcionamento do Cake é algo que precisa de atenção especial. Isso não significa que seja dificil, só quero dizer que você precisa entender que passará por uma readaptação.

O Cake ajuda você a organizar a sua aplicação separando cada "área" do seu sistema.
Por exemplo, dentro da pasta da sua aplicação(normalmente /app) você encontra a pasta views. Nesta pasta serão armazenados os arquivos responsáveis por mostrar as saídas de dados (uma lista de itens cadastrados no banco de dados por exemplo) ou um painel para uma ação solicitada pelo usuário (um formulário que permita a inclusão de itens no banco de dados).

Essas ações e solicitações são controladas pelos Controllers através de funções. Ele interage com os arquivos de visão enviando e recebendo informações através da URL.

Caso seu controller de Itens tenha, no código do arquivo php, uma função chamada Adicionar, esta deverá ter um view correspondente com o mesmo nome da função.

CakePhp - Security.salt

Sempre que iniciamos nossa aplicação somos orientados a configurar o arquivo de conexão com o banco de dados; um outro detalhe importante é o seguinte aviso:


Notice (1024): Please change the value of 'Security.salt' in app/config/core.php to a salt value specific to your application [CORE\cake\libs\debugger.php, line 541]

No decorrer do desenvolvimento de uma aplicação, o Cake nos oferece diversas funcionalidades que otimizam nosso código. Uma delas é o método como iremos trabalhar com sessões.

Sessões são importantes para que possamos estabelecer um tipo de comunicação entre o servidor e o usuário, uma espécie de troca de informações. Um exemplo seria usar as sessões para informar se um usuário efetuou o login ou não.

Pensando assim não é difícil concluir que sessões devem armazernar as informações de uma forma segura. Mas o que este aviso tem a ver com as sessões?

Simples, o Cake define um valor padrão para as suas sessões e o define em Security.salt.
Esse valor não é alterado, ou seja, todos que fazem download do Cake no site oficial tem Security.salt com o mesmo valor. Então junto com a configuração do arquivo do banco de dados devemos alterar também o valor de Security.salt para preservar a segurança das nossas sessões.

Configure::write('Security.salt', 'DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi');

Preencha a linha com alguma string alfanumérica de aproximadamente 40 caracteres.

terça-feira, 4 de novembro de 2008

Realmente ainda preciso aprender. Cakephp, thumbnails, imagejpeg.

Só para fixar que em 99,9% dos casos o problema está entre a cadeira e o teclado.
Mas graças que sou uma menina espertinha e consigo me virar com o que já tem disponível pela internet.

Neste caso eu já havia resolvido este problema há algum tempo atrás mas havia me esquecido.. então para evitar o mesmo erro aqui vai um post só para me obrigar a lembrar disso e nunca mais cometer esse mico.

A questão era a necessidade de se armazenar thumbnails usando o CakePhp.

Para não se gastar tempo buscando soluções no Google, vá direto aqui : http://cakeforge.org/snippet/browse.php?by=lang&lang=5

Meu impasse era o uso do imagejpeg que não conseguia escrever em um diretório. Logo percebi que o problema era o que eu estava passando para o parâmetro visto que trabalho localmente e GD está habilitada.

Chamada : imageResize($srcFile, $destFile, $maxSize, $quality, $setHeight = false)

O parâmetro de $destFile deve passar o caminho junto com o nome do arquivo.
ex.: $destFile = "pasta/nomedoarquivo.jpg"

É só isso que precisava saber. Por isso que programadores de verdade devem ser valorizados e bem pagos! rs