2009-12-18 6 views
0

J'ai un objet Page dont l'unicité provient de PageDomain. Le schéma est configuré de sorte que la table page contienne un champ page_domain_id pour créer la relation. Pour afficher une page, j'ai une action executeShow et un gestionnaire personnalisé. Mon parcours ressemble à ceci:Injecter des critères dans un objet sfPropelRoute

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

A titre d'exemple, je pourrais avoir /audience/create et aussi /behavior/create. Je dois être en mesure de déterminer quelle page est demandée.

L'intention du gestionnaire personnalisé (doSelectByDomain) est de prendre en compte le domain_slug et de récupérer/afficher une page uniquement si son domaine est également correct. Ce que je trouve, cependant, c'est que même si un paramètre domain_slug est disponible dans le paramètre $request de l'action, je n'ai aucun moyen de l'obtenir à mon gestionnaire personnalisé afin qu'il puisse être factorisé dans ce qui est récupéré.

Je me rends compte que je peux accéder à l'objet sfContext directement à partir de mon modèle, mais c'est au mieux inélégant et rompt MVC. Je n'ai pas peur de l'utiliser s'il n'y a vraiment pas de meilleur moyen, mais il semble que ce soit le cas. Symfony propose une méthode setListCriteria pour les routes de liste, mais je ne trouve rien de similaire pour les routes d'objets.

Aide? Merci.

Répondre

3

Alors une petite entreprise à travers le code source m'a trouvé où je devais être. Il semble que sfPropelRoute offre l'option method_for_criteria, mais respecte l'option method de sfObjectRoute et l'utilise à la place si elle existe. S'il n'existe que method_for_criteria, la classe sfPropelRoute crée un objet de critère à partir des paramètres de la demande. Sauf qu'il n'inclut pas de paramètres qui ne sont pas des propriétés de l'objet

Je comprends qu'il y a un argument à faire valoir pour ce comportement, mais à mon avis, c'est une erreur.

Quoi qu'il en soit, la version courte est que si vous utilisez l'option method, tous les paramètres sont transmis (sans modification) en tant que tableau au gestionnaire spécifié. Si vous avez besoin de paramètres de requête autres que ceux qui sont des propriétés de l'objet, cela semble être le chemin à parcourir.

0

Je ne suis pas sûr de comprendre complètement votre problème (j'ai lu ceci pour la balise Propel, pas pour la balise Symfony), mais est-ce que le chapitre Advanced Routing du Calendrier de l'Avent contient de l'aide? Le code est donné pour Doctrine, mais je suppose que vous pouvez également l'adapter pour Propel.

Questions connexes