Usando prefixos como parâmetros em URL’s do CakePHP

Print pagePDF page

Bom, essa dica é bem rápida. Estava eu querendo fazer um seletor de linguagem em um site, para poder fazer urls como: exemplo.com.br/en/pages/show/4 para inglês e exemplo.com.br/es/pages/show/4 para espanhol. Um trabalho para o nosso querido routes.php não é mesmo? Porém, nas minhas andanças pela internet, não achei facilmente um tutorial que explicasse como fazer isso. Então bolei essa minha solução, baseado no que achei pela net.

A idéia é receber no controller pages algum parâmetro. Eu queria receber pelo $this->params[‘named’], mas não consegui achar um jeito de fazer isso. Quem conseguir, por favor, me mande como pelos comentários. A idéia é simples, e a solução também (apesar de não ter sido óbvia pra mim por não ser tão versado no routes.php). No routes.php, eu coloquei o seguinte:

Router::connect('/:lang/pages/*', 
                 array('controller' => 'pages', 'action' => 'show'),
                 array("lang"=>'en|es|fr|br'));

Notem que nesse mesmo connect, eu coloquei um atalho de pages/show/id pra só pages/id. Notem também que só são aceitos os prefixos en, es, fr e br. Qualquer outra coisa, é tratado pelo Cake normalmente.

Essa variável lang, eu pego ela no $this->params, mas ela não vem no named, ela vem fora. Para acessá-lo no controller, você usa $this->params[‘lang’].

Bem simples né? E bem poderoso também 🙂

Espero que seja útil a vocês.

[]’s

Sahb,.