Question

J'ai toujours tendance à oublier ces éléments intégrés Symfony fonctions pour créer des liens.

Était-ce utile?

La solution

Si votre objectif est d'avoir des URL conviviales dans toute votre application, utilisez l'approche suivante :

1) Créez une règle de routage pour votre module/action dans le fichier router.yml de l'application.L'exemple suivant est une règle de routage pour une action qui affiche les questions les plus récentes dans une application, par défaut sur la page 1 (à l'aide d'un téléavertisseur) :

recent_questions:
   url:    questions/recent/:page
   param:  { module: questions, action: recent, page: 1 }

2) Une fois la règle de routage définie, utilisez le url_for() assistant dans votre modèle pour formater les URL sortantes.

<a href="<?php echo url_for('questions/recent?page=1') ?>">Recent Questions</a>

Dans cet exemple, l'URL suivante sera construite : http://myapp/questions/recent/1.html.

3) Les URL entrantes (demandes) seront analysées par le système de routage, et si une correspondance de modèle est trouvée dans la configuration de la règle de routage, les caractères génériques nommés (c'est-à-dire.le :/page partie de l'URL) deviendront des paramètres de requête.

Vous pouvez également utiliser le link_to() assistant pour afficher une URL sans utiliser le code HTML <a> étiqueter.

Autres conseils

Ce conseil concerne Symfony 1.0.Cela fonctionnera probablement pour les versions ultérieures.

Dans votre classe sfAction:

chaîne genUrl($parameters = array(), $absolute = false)

par exemple.$this->getController()->genUrl('votremodule/votreaction?key=value&key2=value', true);

Dans un modèle:

Cela générera un lien normal.

chaîne link_to($name, $internal_uri, $options = array());

par exemple.link_to('Mon nom de lien', 'votremodule/votreaction?key=value&key2=value');

De plus, si vous souhaitez réellement une chaîne de requête avec cette URL, utilisez ceci :

link_to('My link name', 'yourmodule/youraction?key=value&key2=value',array('query_string'=>'page=2'));

Sinon, il va essayer de l'acheminer dans le cadre de l'URL et interrompra probablement votre action.

Vous pouvez générer une URL directement sans définir au préalable la règle.

Si vous souhaitez générer une URL dans les actions, vous pouvez utiliser générerUrl() assistant:

$this->generateUrl('default', array('module'=>'[ModuleName]','action'=>'[ActionName]'))

Si vous souhaitez générer une URL dans les modèles, vous pouvez utiliser url_for() assistant:

url_for('[ModuleName]/[ActionName]', $absolute)

définissez $absolute sur true/false, n'oubliez pas d'utiliser echo si vous souhaitez l'afficher.

Mais si tu veux faire un lien (quelque chose comme <a href=""></a>), lié à() l'aide fera l'affaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top