Criando rotas com Zend Route
Olá galera…
Tudo certo? Começando hoje uma série de posts sobre o Zend_Route. Vamos começar ensinando uma forma de criar rotas personalizadas. Este formato é o mais indicado quanto você tem poucas rotas e estas rotas são simples. Basta adicionar alguns códigos ao seu arquivo application.ini:
resources.router.routes.produto.route = "produto/:categoria/:sub-categoria/:produto" resources.router.routes.produto.defaults.module = default resources.router.routes.produto.defaults.controller = produtos resources.router.routes.produto.defaults.action = show resources.router.routes.produto.defaults.categoria = resources.router.routes.produto.defaults.sub-categoria = resources.router.routes.produto.defaults.produto =
Explicando passo a passo:
resources.router.routes.produto
Indicando ao application.ini que estamos trabalhando com o recurso router e que ali contém uma das rotas (routes), de nome produto. Para definir qualquer informação desta rota, devemos iniciar as linhas com este código.
resources.router.routes.produto.route = "produto/:categoria/:sub-categoria/:produto"
Ao fazermos isto, definimos que todas as URLs que começarem com produto entrarão nesta rota. O primeiro parâmetro após a palavra produto será o parâmetro categoria. O segundo será sub-categoria e o terceiro será o produto.
Definindo os valores padrão (defaults)
Para definirmos para onde será direcionada esta requisição, vamos definir nos valores default.
resources.router.routes.produto.defaults.module = default resources.router.routes.produto.defaults.controller = produtos resources.router.routes.produto.defaults.action = show
Aí definimos que qualquer requisição (página) será direcionada para o módulo default, para o controller produtos e para a action show.
Para evitarmos problemas, definimos também os valores default para os parâmetros (categoria, sub-categoria e produto).
Então, transformamos uma URL assim:
http://site.com.br/produtos/show/categoria/informatica/sub-categoria/notebooks/produto/notebook-dell-inspirion-15-r
por uma URL assim:
http://site.com.br/produto/informatica/notebooks/notebook-dell-inspirion-15-r
Melhorou, né?
Vejam que esta é UMA das formas de fazer isto (existem diversas outras).
Gostou? Comentem!!!



Oi Matias, tudo bem? Gostei muito da sua explicação, parabéns!
Estou tentando criar uma rota no zend e queria uma dica, hoje minha url aparece da seguinte forma:
http://www.site.com.br/controller/action/parametro/valor/produto
Eu gostaria de suprimir o /action/parametro/valor/ ou /controller/action/parametro/valor/
Para aparecer:
http://www.site.com.br/controller/produto ou http://www.site.com.br/produto
Tem como?
Como seria este “produto”? Para tirar o controller dali só se criar uma regra com expressão regular, que vai depender do que vai em produto.
Oi Matias, respondendo sua pergunta, esse “produto” é um valor que eu busco no banco de dados para melhorar um pouco a legibilidade da url, com a url: http://www.site.com.br/controller/action/parametro/valor/ eu já consigo capturar o que necessito, e o valor produto, é o nome do produto, entende?
No final das contas meu objetivo é o seguinte:
Suprimir /controller/action/parametro/valor/ e colocar os valores que eu quiser, exemplo:
http://www.site.com.br/nomequalquer-1/nomequalquer-2/
Olá eu estou com uma dúvida … eu tenho um controller chamado produtos mas só consigo visualizar ele nesta URL:
http://www.site.com.br/produtos/mostrar/id/1
eu fiz exatamente como está ali mas não sei como fazer para trocar a URL para ficar
http://www.site.com.br/produtos/creme-para-a-pele por exemplo …
Como eu consigo subistituir ou passar um valor que ID 1 é igual a creme-para-a-pele?
Obrigada
Olha, para criar a rota exatamente como você está querendo é mais complicado de fazer. O que eu sugiro é que você troque de /produtos/mostrar/id/1 para /produto/creme-para-a-pele. Veja que eu troquei produtos por produto (sem o s). Aí a rota fica mais fácil de criar, ficando assim:
Só que, da forma que você quer (sem colocar o id do produto), o parâmetro id dentro do controller produtos, action mostrar receberá o valor de ‘creme-para-a-pele’. Aí, para localizar este produto você ter que usar este nome. Utilizando o id do produto na frente (1-creme-para-a-pele), basta que você utilize o código abaixo para localizar o produto:
$id = intval($this->_getParam('id', 0)); $produto = $model->find($id)->current();// assumindo que $model é o objeto que contém a sua model // a partir daqui $produto terá o objeto do seu produto, com base no id que você recebeu pela URLPorque isto acontece? Ao utilizar o intval(), o PHP tenta converter a string 1-creme-para-a-pele em um número inteiro. Como o primeiro caractere é um número inteiro, ele pega este número e ignora todo o restante da string, deixando apenas o id do produto.
Oi de novo! Então Matias eu estive olhando um site que você fez o RIPSOU… olhe esta página http://ripsou.com/eventos/ja-rolou <<< fica o eventos/ja-rolou… acho que o que eu preciso não seria somente com as rotas..
ex: o meu ficaria eventos/jarolou…
como queria: eventos/ja-rolou… o route apenas não resolve isto resolve?
Obrigada novamente! Amei seu blog
Obrigado pelo elogio.
Neste caso que você citou, o ja-rolou é uma action do controller eventos, então acho que não é muito o que você está querendo. Ainda acho que a melhor opção é a que te sugeri no comentário anterior. Se não era aquilo que você estava querendo, tenta explicar melhor, dar mais detalhes de como está a URL hoje, qual controller e action você quer acessar, passando o que como parâmetro e como está no momento.
Qual a configuração que faço no Bootstrap?
Não precisa de nenhuma configuração. Só pelo application.ini mesmo.
Funcionou! Valeu!
Que componente é esse que você utilizar para diferenciar as linhas de código no seu post? Estou criando uma intranet na empresa e utiilizo o wordpress. Estou documentando processos de desenvolvimento.
Cara, não me lembro o nome, mas procura por sintax high light que existem vários plugins que fazem isto.
Olá Mathias, bem legal suas informações, porém tenho uma grande dúvida, estou aprendendo sobre o ZendFramework e achei ele fantástico, pois a maioria das coisas você tem controle, porém ainda estou na parte estrutural, uma vez que trabalho com desenvolvimento e nós temos um framework feito pela própria empresa, porém como todos imaginavam temos problemas de produtividade. Como o núcleo do nosso sistema está bem definido e vi que com os módulos o Zend já antende, só que ainda tenho um problema que é as aplicações que rodam no nosso framework vou demonstrar com um exemplo de URL:
http://www.dominioqualquer.com.br//servicos//questionario/id/2
Sendo que:
= exemplo: administrativo
servicos = diretório fixo para subdivisão das aplicações
= aplicação propriamente dita, exemplo: enquete
questionario = pasta de questionários da aplicação enquete
id = parâmetro
2 = valor
Será que ficou claro?
E a principal pergunta o framework da Zend consegue atender tal necessidade?
Abraços.