Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lucaswxp

[TUTORIAL] - Cakephp - Elementos de rotas e URLs amigaveis

Recommended Posts

Olá pessoal, outro tutorial para vocês :)

 

Hoje falaremos de um dos recursos mais interessantes disponíveis em rotas e um exemplo prático de como utilizá-lo.

Falaremos de elementos de rotas. Elementos de rotas são como variáveis que você pode especificar em sua rota, geralmente esta variável é uma expressão regular, porém pode ser qualquer outra coisa. Elementos de rotas devem ser precedidos de dois pontos (:) seguidos do nome do elemento e devem ser especificados no terceiro parâmetro de Router::connect().

Veja um exemplo:

 

Router::connect(
 '/usuarios/editar/:id/',
 array('controller' => 'users', 'action' => 'edit'), // Local à ser redirecionado
 array(
 'id' => '[0-9]+', // Especificamos que o elemento de rota ":id" só casará com números (através de expressão regular)
 ));

Neste exemplo o elemento de rota é ":id", nós definimos um regra de expressão regular para ele no terceiro parâmetro. Esta regra diz que o elemento ":id" deverá ser apenas numérico, caso contrário a rota não casará.

OK! Mas e se casar, como eu terei acesso a este id na action "edit"? Simples, basta:

 

(..)
   function edit(){
     $this->params['id']; // Pegamos o elemento de rota
}
(...)

Simples não? Sim, só que assim é muito feio, não é? Vamos passar o id como parâmetro para a action edit().

Basta uma pequena modificação.

 

Router::connect(
 '/usuarios/editar/:id/' ,
 array('controller' => 'users', 'action' => 'edit'), // Local à ser redirecionado
 array(
 'pass' => array('id'),// Passamos o elemento de rota ":id" para a action (edit) como parâmetro
 'id' => '[0-9]+', // Especificamos que o elemento de rota ":id" só casará com números (através de expressão regular)
 ));

Perfeito! Apenas inserimos um novo item no array do terceiro parâmetro. Este item deverá ter o índice "pass" e o valor ser um array com todos os elementos de rotas que você quer passar para a action.

 

Neste momento você já deve estar dominando os elementos de rotas bem. Então vamos para um exemplo. Faremos URLs amigáveis com o que aprendemos aqui :)

 

Vamos criar um controller "noticias" e uma action "ver" apenas para exemplo.

 

<?php
  class NoticiasController extends AppController {

     function ver($id){

     }

  }
?>

Sem a utilização de rotas teríamos que ter uma url como esta para poder ver uma notícia:

 

http://meusite.com.br/noticias/ver/52

Mas isto não é nada amigável, então vamos deixá-la assim:

 

http://meusite.com.br/noticias/52/os_pais_do_cakephp_saem

Uma simples rota deixará assim:

 

Router::connect(
 '/noticias/:id/:titulo' ,
 array('controller' => 'noticias', 'action' => 'ver'), // Local à ser redirecionado
 array(
 'pass' => array('id'), // Passamos o elemento de rota ":id" para a action (ver) como parâmetro
 'id' => '[0-9]+', // Especificamos que o elemento de rota ":id" só casará com números (através de expressão regular)
 'titulo' => '[a-zA-Z0-9_-]*', // Regra (expressão regular) para o elemento de rota ":titulo", apenas casará com letras, numeros, traços ou underlines
 ));

 

E pronto! Nossa rota está pronta. Mas uma coisa... Como criar um link para esta rota? Veja um exemplo

 

view_qualquer.ctp

 

<?php
 echo $html->link('Minha noticia' , array(
 'controller' => 'noticias',
 'action' => 'ver',
 'id' => 5,
 'titulo' => Inflector::slug('Os pais do CakePHP saem')
 ));
?>

É isso aí pessoal, por hoje é só. Até a próxima o/

 

Fonte: http://lucaspelegrino.com

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.