2010-01-10 5 views
0

J'ai donc un module qui affiche les articles. Et j'ai essayé de faire une action qui affichait tout l'article d'une certaine publication quand cette publication a été cliquée. J'ai essayé de suivre le chemin pour le faire sur les didacticiels jobf de symfony mais j'ai rencontré de nouveaux maux de tête. Puisque les publications et les auteurs peuvent parfois être hostiles, je veux utiliser des limaces, et c'est là que j'ai rencontré le problème.Problème de routage avec Symfony

J'ai donc un module d'article et j'ajouté une règle de routage comme celui-ci

publication_articles: 
    url: /publications/:publication_slug 
    class: sfDoctrineRoute 
    param: { module: article, action: publication } 
    options: { model: Article, type: list } 

J'ai ensuite ajouté une fonction getPublicationSlug() à la classe d'article qui a des espaces et des caractères spéciaux - rien de spécial.

J'ai ensuite ajouté cette fonction à la classe d'action:

public function executePublication(sfWebRequest $request) 
    { 
     $this->articles = $this->getRoute()->getObjects(); 
    } 

Lorsque je tente d'ajouter un lien comme celui-ci:

<a href="<?php echo url_for('publications/'.$article->getPublicationSlug()) ?>"><?php echo $article->getPublication() ?></a> 

La page renvoie tous les articles sans filtrage sur la publication

et si j'ajouter un lien comme celui-ci:

<?php echo link_to($article->getPublication(), 'publication_articles', $article) ?> 

Je reçois cette erreur:

The "/publications/:publication_slug" route has some missing mandatory parameters (:publication_slug).

Toutes les idées? Merci beaucoup!

Répondre

1

La liaison d'objet référencée dans les guides Symfony (url_for ('my_route', $ obj)) n'a jamais fonctionné correctement pour moi. Au lieu de cela, je génère toujours mes itinéraires en utilisant l'insertion de paramètres directs, essayez plutôt:

<?php echo link_to($article->getPublication(), '@publication_articles?publication_slug=' . $article->getPublicationSlug()) ?> 
+3

Alors que ce qui précède va résoudre votre problème immédiat, il semble que vous aurez un problème plus profond suivant. Après avoir regardé dans le routage de getter personnalisé plus loin, il semble que ce n'est pas du tout supporté par Doctrine, seulement Propel. sfDoctrineRoute correspond uniquement aux colonnes qui existent réellement dans la définition de la table tandis que sfPropelRoute utilise la réflexion pour autoriser les getters personnalisés. Vous aurez besoin d'ajouter vos colonnes de slug dans votre définition de table pour que cela fonctionne. – nortron

+0

Merci pour l'aide. C'est bizarre bc cette page dit que cela est soutenu par la doctrine. http://www.symfony-project.org/jobeet/1_2/Doctrine/fr/07 – Danny

+0

J'utilisais le même didacticiel pour l'implémenter mais je n'arrivais pas à le faire fonctionner comme ils le disaient donc je plongeais dans le sfDoctrinePlugin actuel code et l'a confirmé. J'espère que j'ai tort, mais j'ai écrit une mise en œuvre de test et je ne pouvais pas le faire fonctionner. Si vous trouvez un moyen de le faire fonctionner s'il vous plaît faites le moi savoir. – nortron