quinta-feira, 17 de novembro de 2011

CakePHP 2.0.2 e o novo objeto CakeRequest

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.
$this->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. 
Para utilizarmos, no controller é só colocarmos:
$this->request  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->request->is
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->request->is('post')) {
$this->MaterialGroup->create();
if ($this->MaterialGroup->save($this->request->data)) {
                                    if($this->request->is('ajax')){
                                        $result = $this->MaterialGroup->find('list',
                                                array('fields' => array('MaterialGroup.id','MaterialGroup.name'),
                                                      'order' => array('MaterialGroup.name ASC')));
                                        echo json_encode(array_values($result));
                                         $this->autoRender = false;
                                        exit();
                                    }
                                    $this->redirect(array('action'=>'index'));
                                    $this->Session->setFlash(__('The material group has been saved'));
} else {
$this->Session->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.

Nenhum comentário:

Postar um comentário