CakePHP 2.0.2 e o novo objeto CakeRequest
Autor: Tiago Rafael | Publicado: 2011-11-17T07:32:00-08:00




O CakePHP é um framework de desenvolvimento ágil, para web em PHP. Há quatro semanas ganhou a versão 2.0 e nesta data que escrevo a versão já se encontra na versão 2.0.2.

Este curto post é direcionado a um público que já usa o cake, mas não sabe o que muda na versão 2 do framework.



Uma das várias mudanças, a que abordarei aqui esta relacionado à forma que o Cake trabalha com as requisições do cliente para o servidor.

O&nbsp;$this-&gt;RequestHandler(); é o componente responsável para manipular as requisições no CakePHP 1.3


Porém no CakePHP 2.0 este Componente está obsoleto e não dever ser mais usado.

Para tratarmos requisições utilizaremos agora o objeto CakeRequest.&nbsp;

Para utilizarmos, no controller é só colocarmos:

$this-&gt;request &nbsp;Este código é definido como:

An instance of a CakeRequest object that contains information about the current request. This object contains all the information about a request and several methods for reading additional information about the request.

Ou seja, uma instância do objeto CakeRequest contém as informações sobre o último request feito ao servidor. Contém toda a informação sobre a requisição, e métodos para levantarmos informações adicionais sobre a requisição (request).

Praticamente vou demonstrar o uso do método $this-&gt;request-&gt;is.&nbsp;

Este método recebe como parâmetro fontes de requisições como: post, get, ajax e outros.

Logo posso saber a origem de minha requisição. Se ela chegou por post ou por ajax e etc.



Vou passar um exemplo de uso prático:




if ($this-&gt;request-&gt;is('post')) {
   $this-&gt;MaterialGroup-&gt;create();
   if ($this-&gt;MaterialGroup-&gt;save($this-&gt;request-&gt;data)) {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if($this-&gt;request-&gt;is('ajax')){
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $result = $this-&gt;MaterialGroup-&gt;find('list',
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; array('fields' =&gt; array('MaterialGroup.id','MaterialGroup.name'),
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'order' =&gt; array('MaterialGroup.name ASC')));
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; echo json_encode(array_values($result));
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$this-&gt;autoRender = false;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit();
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;redirect(array('action'=&gt;'index'));
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;Session-&gt;setFlash(__('The material group has been saved'));
   } else {
    $this-&gt;Session-&gt;setFlash(__('The material group could not be saved. Please, try again.'));
   }
}



Este código verifica se a requisição veio por post. Se vier por get, ele não fará nada, mas por post ele realizará a ação.
Note que após o salvamento dos dados, é feito uma verificação para ver se esta requisição veio por ajax, ou por requisição comum.
Se for ajax, eu retornarei uma consulta, em json para o ajax. Se não veio por ajax, eu renderizarei uma página, com uma mensagem indicando o sucesso do salvamento.
Não detalharei mais porque isso ficará muito grande. Espero que tenha cumprido o objetivo, que seja mostrar na prática as mudanças e usos do cakephp 2.0. Quem desejar estudar mais o cakephp, leia o cookbook, que está fresquinho, porém só no idioma em inglês. Tudo neste link.