2008-08-29 7 views

Répondre

7

Si votre objectif est d'avoir des URL conviviales tout au long de votre application, utilisez l'approche suivante:

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

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

2) Une fois que la règle de routage est définie, utilisez l'assistant url_for() 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, sera construit l'URL suivante: http://myapp/questions/recent/1.html. 3) Les URL entrantes (requêtes) seront analysées par le système de routage, et si une correspondance de modèle est trouvée dans la configuration des règles de routage, les caractères génériques nommés (la partie :/page de l'URL) deviendront des paramètres de requête.

Vous pouvez également utiliser l'assistant link_to() pour générer une URL sans utiliser la balise HTML <a>.

+0

Juste un nit, mais l'URL ne sera pas construite avec la partie .html à moins que l'application est configurée pour le faire (par défaut il ne l'est pas). –

1

Ce conseil est pour symfony 1.0. Cela fonctionnera probablement pour les versions ultérieures.

Au sein de votre classe sfAction:

chaîne genUrl (paramètres $ = array(), $ absolu = false)

par exemple. $ this-> getController() -> genUrl ('yourmodule/youraction? Clé = valeur & key2 = valeur', true);

Dans un modèle:

Cela va générer un lien normal.

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

par ex. link_to ('Mon nom de lien', 'yourmodule/youraction? Key = valeur & key2 = value');

0

En outre, si vous voulez vraiment une chaîne de requête avec cette URL, vous 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 de briser probablement votre action.

0

Vous pouvez générer une URL directement sans définir la règle en premier.

Si vous voulez générer URL dans les actions, vous pouvez utiliser generateUrl() aide:

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

Si vous voulez générer URL dans les modèles, vous pouvez utiliser url_for() aide :

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

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

Mais si vous voulez faire un lien (quelque chose comme <a href=""></a>), link_to() aide fera.

Questions connexes