Como faço para gerar uma URL amigável em PHP Symfony?
Pergunta
Eu sempre tendem a esquecer essas built-in O Symfony funções para fazer ligações.
Solução
Se o seu objetivo é ter user-friendly URLs todo o aplicativo, use a seguinte abordagem:
1) Criar uma regra de roteamento para o seu módulo/acção da aplicação de roteamento.yml arquivo.O exemplo a seguir é uma regra de roteamento para uma ação que mostra as perguntas mais recentes em um aplicativo, padronizando a página 1 (usando um pager):
recent_questions:
url: questions/recent/:page
param: { module: questions, action: recent, page: 1 }
2) uma Vez que a regra de roteamento seja determinado, use o url_for()
auxiliar no seu modelo para formatar a saída de URLs.
<a href="<?php echo url_for('questions/recent?page=1') ?>">Recent Questions</a>
Neste exemplo, o URL a seguir serão construídos: http://myapp/questions/recent/1.html
.
3) os URLs de Entrada de pedidos serão analisados pelo sistema de roteamento, e se um padrão de correspondência for encontrada na regra de roteamento de configuração, o nome de curingas (ie.o :/page
parte do URL) torna-se o pedido de parâmetros.
Você também pode usar o link_to()
auxiliar para a saída de um URL sem o uso de HTML <a>
etiqueta.
Outras dicas
Este conselho é para symfony 1.0.Ele provavelmente irá funcionar para versões posteriores.
Dentro de sua classe sfAction:
cadeia genUrl($parameters = array(), $absoluta = false)
por exemplo.$this->getController()->genUrl('yourmodule/youraction?chave=valor&key2=valor', true);
Em um modelo:
Isso irá gerar um link normal.
cadeia link_to($nome, $internal_uri, $options = array());
por exemplo.link_to('Meu nome do link', 'yourmodule/youraction?chave=valor&key2=valor");
Além disso, se você realmente quer uma seqüência de consulta com que a url, você pode usar isto:
link_to('My link name', 'yourmodule/youraction?key=value&key2=value',array('query_string'=>'page=2'));
Caso contrário, ele vai tentar direcioná-la como parte da url e a provável quebra de sua ação.
Você pode gerar a URL diretamente, sem definir a regra primeira.
Se você deseja gerar URL em ações, você pode usar generateUrl() auxiliares:
$this->generateUrl('default', array('module'=>'[ModuleName]','action'=>'[ActionName]'))
Se você deseja gerar URL nos modelos, você pode usar url_for() auxiliares:
url_for('[ModuleName]/[ActionName]', $absolute)
definir $absoluto como verdadeiro/falso, não se esqueça de usar o eco, se você deseja exibi-lo.
Mas se você quiser fazer uma link (algo como <a href=""></a>
), link_to() auxiliar irá fazer.