5 de Abril de 2008 às 18:47
· Categorias: CakePHP, CakePHP 1.2
Olá pessoal,
esta é uma dica rápida. O antigo Model->generateList agora virou find("list"), sendo que o seu uso foi simplificado ainda mais.
Agora basta adicionar o atributo $displayField no model com o nome do campo que será mostrado em uma lista desses valores. Se tivessemos um model Estado (id, nome e abrev) com todos os estados brasileiros e decidimos mostrar o campo nome, bastaria no model:
PHP:
-
class Estado extends AppModel{
-
-
var $name = "Estado";
-
-
var $displayField = "nome";
-
-
}
E no controller:
PHP:
-
$this->set("estados", $this->Estado->find("list"));
Simples não?
Até a próxima pessoal!
Link Permanente
21 de Março de 2008 às 21:00
· Categorias: CakePHP 1.2
Olá pessoal,
essa semana fui publicar um site no meu sharedhost e tive um erro de página em branco, sem erros, sem nada. Nada de saÃda mesmo.
Depois de fazer tudo que estava descrito no grupo oficial, como desligar o Zend Optimizer via htaccess e etc, resolvi entrar em contato com o suporte do host, claro, completamente desanimado e sem esperanças de uma solução.
Foi quando me responderam que eu deveria enviar o site novamente mas não escolher o ASCII (ou modo automático que escolhe de acordo com o arquivo entre binário e ASCII) e sim modo binário para transmissão de todos os arquivos. Imaginei logo que seria uma tÃpica resposta sem nexo. Relutei, perguntando qual o sentido para isso, mas ele me disse (resumidamente) "apenas faça".
Re-enviei os arquivos em modo binário e para minha surpresa, FUNCIONOU! Estou sem entender o motivo, mas pelo menos funcionou... Se alguém passar pelo mesmo problema, vale a pena tentar. 
Abraços pessoal e até a próxima.
Link Permanente
15 de Janeiro de 2008 às 22:19
· Categorias: CakePHP, CakePHP 1.2
Olá pessoal,
a medida que passei a usar mais o CakePHP 1.2, passei a me deparar com mais problemas. (Não são muitos. Mas alguns são bem chatos.)
Estava instalando um novo site na Dreamhost, quando me deparei com o seguinte erro:
Missing Controller
Error: InternalError.htmlController could not be found.
Error: Create the class InternalError.htmlController below in file: app/controllers/internal_error.html_controller.php
<?php
class InternalError.htmlController extends AppController {
var $name = 'InternalError.html';
}
?>
Notice: If you want to customize this error message, create app/views/errors/missing_controller.ctp
Percebam que nem mesmo o nome deste controlle solicitado é coerente. Depois de muito ajeitar o routes sem muito sucesso, acabei descobrindo na lista oficial que deveria trocar a conta para PHP 4. Não entendi o porquê do erro, mas felizmente a Dreamhost me permitiu fazer isso!
Abraços e espero que ninguém passe por isso em um servidor de hospedagem que não dá a mesma liberdade que a DH!
Link Permanente
11 de Janeiro de 2008 às 13:19
· Categorias: CakePHP, CakePHP 1.2
Olá pessoal,
continuando a série de posts sobre o CakePHP 1.2 e das mudanças que ele trouxe, neste post irei falar como carregar dinâmicamente model', controller's e component's.
No Cake 1.1, era comum usármos:
PHP:
-
loadModel("nomeDoModel");
-
loadComponent("nomeDoComponent");
-
loadControllers("nomeDoController");
No Cake 1.2 todos os esses loads viraram App::import, que seria usado assim:
PHP:
-
App::import("Model", "nomeDoModel");
-
App::import("Component", "nomeDoComponent");
-
App::import("Controller", "nomeDoController");
O Cake 1.2 está se tornando OO de verdade.
Abraços pessoal e até a próxima!
Link Permanente
10 de Janeiro de 2008 às 11:13
· Categorias: CakePHP, CakePHP 1.2
Olá pessoal,
um recurso bem interessante do CakePHP 1.2 é o chamado named params, ou parâmetros nomeados, que consiste em enviar informações pela URL mas sem precisar ter uma "ordem" para isso.
Por exemplo:
www.dominio.net/controller/método/nome:Tulio/cidade:Pouso Alegre/
Assim podemos recuperar estes valores dentro do controller usando o seu nome e não mais dependendo da posição que ela está na URL.
Todos os parâmetros nomeados chegam ao controller dentro de $this->params["named"], neste exemplo acima, teriamos $this->params["named"]["nome"] e $this->params["named"]["cidade"].
Vale lembrar que como o parâmetro nomeado pode ou não vir na URL, devemos verificar sua existência com isset antes de usá-lo.
Até a próxima pessoal, qualquer dúvida, comentem!
Link Permanente
9 de Janeiro de 2008 às 21:20
· Categorias: CakePHP, CakePHP 1.2
Olá pessoal,
atendendo a pedidos e aproveitando que por se tratar de um assunto interessante, vou falar sobre a inserção e atualização de dados no CakePHP 1.2.
A primeira mudança que encontramos é a inclusão do método set para o model, assim antes de salvarmos, validarmos e etc, devemos definir os dados usando o mesmo.
Como todos sabem o Cake usa um único método para criar e atualizar registros (o método save). Mas como diferenciar um do outro? Com o ID
Se nos dados passados (setados) houver o id, será efetuado um update, senão um insert. Simples, não?
Exemplo:
PHP:
-
$dados =
array("Usuario"=>
-
-
"id"=>1,
-
"nome"=>"Tulio Faria"
-
)
-
);
-
-
$this->Usuario->set($dados);
-
$this->Usuario->save();
Como em $dados tem o id (chave primária), neste caso, seria feito um update setando o nome para "Tulio Faria" do Usuario de id = 1.
Para fazermos o insert, bastaria tirar o id de dados.
Para atualizar um único campo, podemos usar um outro método, o saveField.
PHP:
-
$this->Usuario->id = 1;
-
$this->Usuario->saveField("nome", "Tulio Faria");
Neste caso, faria o mesmo efeito do exemplo do save, atualizando o nome para "Tulio Faria" para o Usuario de id = 1.
Bom é isso pessoal, qualquer dúvida comentem!
Abraços,
Link Permanente
5 de Janeiro de 2008 às 12:55
· Categorias: CakePHP, CakePHP 1.2
Olá pessoal,
eu venho usando o CakePHP 1.2 nos meus projetos recentes, e confesso que o quer já era bom ficou muitÃssimo melhor.
Uma das novas caracterÃsticas incorporadas ao core do CakePHP 1.2 é o helper para paginação e que salvou minha pele em um projeto, onde do dia para noite 10 registros viraram 6000, e resolvido com uma paginação em menos de 2 minutos.
Para usá-lo, começamos definindo os parâmetros da paginação, que pode ser feito de modo genérico para todos os models usados do controller (código aplicado no controller que terá paginação):
PHP:
-
var $paginate =
array('limit' =>
50);
Neste caso definimos o tamanho da página de registros com o tamanho 50. Podemos ainda, adicionar conditions, fields, order, page e recursive, assim como é feito no findAll de um model.
Essa configuração será usada para todos os models deste controller. Se quisermos configurações diferentes para models diferentes, usarÃamos:
PHP:
-
-
-
'Model1'=>
array('limit' =>
50),
-
-
'Model2'=>
array('limit' =>
20)
-
-
);
Depois de configurado, na hora de enviarmos os dados para o view, ao invés de usar findAll ou similares, usaremos:
PHP:
-
$this->set("dados", $this->paginate("NomeDoModel"));
Pronto, agora só falta mostrar as páginas no view com:
PHP:
-
Mostrando página:
<?php echo $paginator->
counter(array("separator"=>
" de "));
?>
-
-
...
-
-
<?php echo $paginator->
prev("Anterior");
?>
-
-
<?php echo $paginator->
numbers();
?>
-
-
<?php echo $paginator->
next("Próxima");
?>
Depois disso é só testar e correr pro abraço
Bom pessoal, qualquer dúvida comentem! Abraços e até a próxima!
Link Permanente