2009-12-28 7 views
0

je un itinéraire défini qui affiche une page dynamique:Passant Params à Symfony Routes

page_show: 
    url:  /:domain_slug/:slug 
    class: sfPropelRoute 
    options: 
    model: Page 
    type: object 
method: doSelectByDomain 
    param: { module: page, action: show } 
    requirements: 
    sf_method: [get] 

Cela fonctionne très bien, mais maintenant je veux ma page d'accueil URI route vers une page spécifique. Pour ce faire, je suppose que je dois passer les valeurs :domain_slug et :slug de la page que je veux afficher comme page d'accueil. C'est bien, mais je n'arrive pas à trouver une documentation ou un exemple qui me montre comment s'y prendre.

Est-il possible de spécifier des valeurs de variables spécifiques dans une route? Dans ce cas, je veux passer :domain_slug => portal, :slug => dashboard (cette syntaxe ne fonctionne pas, btw). Essentiellement, je veux créer un itinéraire de page d'accueil qui ressemble à ceci:

homepage: 
    url: /
    class: sfPropelRoute 
    param: { module: page, action: show, array(:domain_slug => portal, :slug => dashboard) } 
    options: 
    model: Page 
    type: object 
    method: doSelectByDomain 

Mais assez différent que, vous savez, fonctionne. :-) Je suppose que je pourrais créer une route simple vers une méthode différente, modifier manuellement les paramètres de la requête et la transférer vers la méthode executeShow(), mais c'est un hack que je préfère éviter si une solution plus élégante est disponible.

Merci.

Répondre

0

Je n'ai jamais trouvé un moyen de faire cela qui marchait (ou peut-être que je n'arrivais pas à le faire correctement). Ma solution était de créer l'itinéraire et le faire passer à travers une méthode personnalisée qui fait le travail pour préciser les détails de la page appropriée:

homepage: 
    url: /
    class: sfPropelRoute 
    options: 
    model: Page 
    type: object 
    method: doSelectHomepage 
    param: { module: page, action: show) } 
    requirements: 
    sf_method: [get] 

La méthode doSelectHomepage() fait tout le travail que j'espérais que je serais capable de faire par des valeurs de codage en dur dans la route elle-même.

+0

c'est horrible. Est-ce vraiment la solution? symfony est un cadre tellement stupide ... je suis dans le même bateau et je ne veux vraiment pas faire ça ... vous êtes supposé pouvoir simplement passer dans param: {misc_arg: value} selon tout ce que je Je lis, mais ça ne marche pas. argh – Tom

3

Vous pouvez définir des valeurs dans la clé param de la route ... par exemple:

homepage: 
    url: /
    class: sfPropelRoute 
    param: { module: page, action: show, domain_slug: portal, slug: dashboard} 
    options: 
    model: Page 
    type: object 
    method: doSelectByDomain 

Au moins thats comment il fonctionne avec une route non Propel/doctrine. Je suppose que cela devrait être la même chose avec n'importe quel type d'itinéraire dans le cadre.

+0

Oui, j'ai aussi essayé. Lorsque le flux de travail atteint ma méthode de gestionnaire personnalisé ('doSelectByDomain'), aucun paramètre n'est présent. Le tableau est complètement vide. –

0

En fait, cela a fonctionné, c'était juste l'ordre dans lequel les routes étaient définies. La première réponse est correcte. Cela peut avoir fonctionné pour vous si vous avez ajouté la règle "page d'accueil" AVANT la règle "page_show". Symfony n'est peut-être pas aussi bête que je le pensais ... Non, non, ça l'est. Ce n'est pas si mal.

Questions connexes