¿Cómo puedo generar una URL amigable en Symfony PHP?
Pregunta
Siempre tiendo a olvidar estos integrado Symfony funciones para hacer enlaces.
Solución
Si tu objetivo es tener URLs amigables en toda la aplicación, utilice el siguiente enfoque:
1) Crear una regla de enrutamiento para su módulo/acción en la aplicación de enrutamiento.fichero yaml.El siguiente ejemplo es una regla de enrutamiento para una acción que muestra el más reciente preguntas en una aplicación, por defecto la página 1 (utilizando un localizador):
recent_questions:
url: questions/recent/:page
param: { module: questions, action: recent, page: 1 }
2) una Vez que la regla de enrutamiento de uso de la url_for()
ayudante en su plantilla a formato saliente Url.
<a href="<?php echo url_for('questions/recent?page=1') ?>">Recent Questions</a>
En este ejemplo, la dirección URL siguiente será construido: http://myapp/questions/recent/1.html
.
3) las direcciones Url Entrantes (solicitudes), será analizado por el sistema de enrutamiento, y si un patrón de coincidencia se encuentra en la regla de enrutamiento configuración, el nombre de comodines (es decir.el :/page
parte de la dirección URL) se convertirán en los parámetros de solicitud.
También puede utilizar el link_to()
auxiliar a la salida de una URL sin necesidad de utilizar el HTML <a>
de la etiqueta.
Otros consejos
Este consejo es para symfony 1.0.Probablemente funcionará para las versiones posteriores.
Dentro de su sfAction clase:
cadena de genUrl($parameters = array(), $absoluta = false)
por ejemplo.$this->getController()->genUrl('yourmodule/youraction?clave=valor&clave2=valor', true);
En una plantilla:
Esto generará un enlace normal.
cadena de link_to($nombre, $internal_uri, $options = array());
por ejemplo.link_to('Mi nombre de enlace', 'yourmodule/youraction?clave=valor&clave2=valor');
Además, si usted realmente desea una cadena de consulta con la dirección, puede utilizar esta:
link_to('My link name', 'yourmodule/youraction?key=value&key2=value',array('query_string'=>'page=2'));
De lo contrario, iba a tratar de ruta como parte de la url y el salto probable de su acción.
Usted puede generar URL directamente sin definir la regla primera.
Si desea generar un URL en las acciones, puede utilizar generateUrl() helper:
$this->generateUrl('default', array('module'=>'[ModuleName]','action'=>'[ActionName]'))
Si desea generar URL de las plantillas, puede utilizar url_for() helper:
url_for('[ModuleName]/[ActionName]', $absolute)
conjunto de $absolutos como verdadero/falso, no te olvides de usar echo si desea mostrar.
Pero si usted desea hacer un enlace (algo así como <a href=""></a>
), link_to() ayudante va a hacer.