IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Paramètres possibles d'une route [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 32
    Par défaut Paramètres possibles d'une route
    Bonjour,

    Une route peut avoir comme paramètre n'importe quelle colonne de l'objet associé. Mais est-ce qu'elle peut avoir comme paramètre une colonne d'un autre objet (associé par foreign key)?
    Si oui, comment (en considérant une configuration standard)?
    J'espère que je me suis bien fait comprendre.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 32
    Par défaut
    par exemple:

    transformer: monprojet.com/article/ID_RUBRIQUE/nom_article
    par : monprojet.com/article/NOM_RUBRIQUE/nom_article

  3. #3
    Invité
    Invité(e)
    Par défaut
    Tous les accesseurs présents dans ton modèle sont accessibles au niveau du framework du routing.

    Exemple classique :
    Modèle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     class Article extends BaseArticle
    {
      public function getRubriqueSlug()
      {
         // Pas très optimisé, mais rapide à écrire pour l'exemple
         return $this->getRubrique()->getSlug();
       }
    }
    Routing
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    article:
      url: /article/:rubriqueSlug/:slug.htm
      class: sfDoctrineRoute
      param: { module: blog, action: show }
      options: { model: Article, type: object }
      requirements:
        sf_method: [get]

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 32
    Par défaut
    Oui mais dans mon exemple, ->getRubrique n'est pas un accesseur de la classe Article mais de la classe Rubrique.
    Je formule différemment:

    A partir de la colonne id_rubrique de la classe Article, je veux renvoyer le contenu de la colonne nom_rubrique de la classe Rubrique, ceci dans la route showArticle (option: {model: Article,...}).

  5. #5
    Invité
    Invité(e)
    Par défaut
    Tu peux nous montrer ton schéma pour que cela soit plus clair ?

    Car avoir un accesseur getRubrique() dans ta classe Rubrique ça me semble louche ^^

    Si ta table Article et ta table Rubrique sont liées correctement, tu dois avoir un accesseur dans Article pour obtenir l'objet rubrique. Je ne sais pas comment s'appelle cet accesseur chez toi ( ça dépend de l'alias que tu as utilisé ). Ensuite un accesseur dans l'objet rubrique, pour récupérer le libellé de cette rubrique ( getNomRubrique() il semblerait ).

    Ce qui donnerait de manière rapide ( et toujours pas optimisée )
    Article
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public function getNomRubrique()
      {
     
         return $this->getRubrique()->getNomRubrique();
     }
    Il va falloir aller plus loin, car il est très fortement déconseillé d'utiliser un champs texte directement dans une url, il faut plutôt utilisé un slug ( suppression des accents et des caractères exotiques ).

    Secondo, dans cet exemple, une requête sql va se faire sur la table Rubrique en "select *", puis doctrine va mapper ces résultats sur un objet Rubrique, tout ça pour ne récupérer qu'une seule colonne.
    La vrai solution serait de créer un accesseur qui récupèrerait directement le nom de ta rubrique, et sans hydrater l'objet.

    Ca doit donner un code de ce genre ( à tester ):
    Article
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public function getNomRubriqueSlug()
    {
       $nom = Doctrine_Core::getTable('Rubrique') 
                     ->createQuery('r')
                     ->select('r.nom_rubrique')
                     ->where('r.id = ?', $this->getIdRubrique())
                     ->fetchOne(array(), Doctrine_Core::HYDRATE_SINGLE_SCALAR);
       return Doctrine_Inflector::urlize($nom); // Sluggification, seulement si tu n'as pas défini de slug dans ton schema
    }
    Dernière modification par Invité ; 19/08/2010 à 14h17.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 32
    Par défaut
    Merci yotsumi,

    tu as parfaitement répondu à mon attente et tu m'as appris des fonctions doctrine par la même occasion.

    Grand MERCI

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2.x] Passage de paramètres depuis une route
    Par blacksf dans le forum Symfony
    Réponses: 1
    Dernier message: 11/09/2012, 12h42
  2. [2.x] Récupérer un paramètre dans une Route sans l'afficher ?
    Par tbreton dans le forum Symfony
    Réponses: 2
    Dernier message: 20/07/2011, 08h51
  3. [XSLT] type de paramètre possible à une feuille
    Par leo13 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 01/12/2007, 10h58
  4. Paramètres possibles dans une vue ms sql server
    Par lutin2003 dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 30/03/2005, 19h03
  5. Requête paramétrée qui remplit une DBLookUpComboBox
    Par navis84 dans le forum Bases de données
    Réponses: 6
    Dernier message: 02/12/2004, 21h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo