lucaswxp 22 Denunciar post Postado Novembro 8, 2009 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
Alexandre Di Salvo 0 Denunciar post Postado Novembro 16, 2009 Muito bom. Parabéns! Compartilhar este post Link para o post Compartilhar em outros sites
kakaroto developer 0 Denunciar post Postado Março 23, 2010 muito bom mesmo eu tava atras desse lance de rotas :) show de bola :) Compartilhar este post Link para o post Compartilhar em outros sites
lucaswxp 22 Denunciar post Postado Março 23, 2010 Fico feliz que tenham gostado =) Compartilhar este post Link para o post Compartilhar em outros sites
karl-el 0 Denunciar post Postado Junho 12, 2010 muito legal! Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Abril 6, 2014 Muito bom! Compartilhar este post Link para o post Compartilhar em outros sites