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

 PHP Discussion :

Routing avec variable slug [1.x]


Sujet :

PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Par défaut Routing avec variable slug
    Bonjour.

    Je me trouve actuellement devant un petit problème de routage.
    J'ai un module que l'on appelera "mod".
    Ce module dépend de deux classes/tables differentes "class_a" et "class_b". Chacune de ces classes possède un attribut "slug".

    J'ai créé deux routes différentes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    route_class_a:
      url: /mod/montexte_a/:slug/
      class: sfDoctrineRoute
      param: {module: mod, action: monAction_a}
      options: { model: class_a, type: object }
     
    route_class_b:
      url: /mod/montexte_b/:slug/
      class: sfDoctrineRoute
      param: {module: mod, action: monAction_b}
      options: { model: class_b, type: object }
    Or, quand dans les templates nécessaires, je fais par exemple un :

    url_for("/mod/montexte_a/<?php class_a->getSlug();?>") j'obtiens seulement :
    cheminJusquaRacine/mod/montexte_a/
    sans le slug. Pourtant le slug est bien juste après vérification.

    Si j'enlève "montexte_a", tout fonctionne bien (que pour la première route ce qui est logique car il ne peut pas faire la différence entre les deux).
    Et les seules autres routes que j'ai sont :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    mod:
        url: /mod/
        param: {module: mod, action: index}
     
    # default rules
    homepage:
      url:   /
      param: { module: accueil, action: index }
     
    # generic rules
    # please, remove them by adding more specific rules
    default_index:
      url:   /:module/
      param: { action: index }
     
    default:
      url:   /:module/:action/*
    Avez-vous une idée de pourquoi cela ne fonctionne pas ?

    Je sais que je peux résoudre le problème en appelant directement la route que je veux mais j'aimerais savoir le faire sans cela.

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Je ne suis pas sur de comprendre l'intérêt de ton montage, mais il ne peut pas fonctionner avec la commende que tu indiques mettre dans ton template.

    En effet, pour figurer dans le template, ton code devras se présenter ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php url_for("/mod/montexte_a/<?php class_a->getSlug();?>") ?>
    hors tu ne peux pas enchainer deux <?php l'un dans l'autre. Je suis même étonné que tu n'ai pas un problème parse lors de l’exécution.

    La commande url_for va accepter une chaine de caractère en paramètre il faut donc, suivant le cas quelle soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cas a: url_for('@route_class_a?slug=monSlugPourLaClasseA')
    cas b: url_for('@route_class_b?slug=monSlugPourLaClasseB")
    Par contre, je ne vois pas dans ton code où tu choisis la route pour A ou pour b ?

    Si c'est en fonction de la structure du slug, tu aurais, peut-être, intérêt à créer une action générique pour tes routes qui fera soit un redirect, soit un forward vers le module et l'action idoine.

    Si tu mets le choix directement dans la génération de l'url, pour A, suivant ton exemple, tu auras :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="<?php echo url_for('@route_class_a?slug=' . $class_a->getSlug() ?>">Texte pour le lien</a>

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Par défaut
    Citation Envoyé par Michel Rotta Voir le message
    Je ne suis pas sur de comprendre l'intérêt de ton montage, mais il ne peut pas fonctionner avec la commende que tu indiques mettre dans ton template.

    En effet, pour figurer dans le template, ton code devras se présenter ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php url_for("/mod/montexte_a/<?php class_a->getSlug();?>") ?>
    hors tu ne peux pas enchainer deux <?php l'un dans l'autre. Je suis même étonné que tu n'ai pas un problème parse lors de l’exécution.
    Ceci était une erreur de recopiage, désolé :p

    EDIT : en fait, après moulte test et emmêlage de pinceaux, j'ai trouvé la solution. Mon problème : une petite lacune d'interprétation du routage, je prenais un peu tout à l'envers. Ce que je voulais faire n'était pas bien compliqué si j'avais pris dans le bon sens.

    Merci quand même pour votre aide. :p

  4. #4
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Ma réponse ne va pas aider, mais dépend de ce que l'on met dans mon_text_1 et mon_text_2

    Le principe des routes est d'attribuer un nom significatif à une association d'un module et d'une action. Par exemple, le module securite et l'action sign_in seront associé à l'url login.

    Dans la question posé, il est impossible de savoir ce que représente les deux mon_texte, des variables, des constantes, des slug, des expressions...

    Il faut plus d'information sur ce que tu veux réellement obtenir.

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

Discussions similaires

  1. Requête avec variable incrémentée sur changement de clé.
    Par souellet dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/09/2005, 22h47
  2. Merge avec variables
    Par kluh dans le forum Oracle
    Réponses: 18
    Dernier message: 25/07/2005, 14h31
  3. [AS2] Pb avec variables dans syntaxe
    Par ooyeah dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 05/07/2005, 11h28
  4. Boucle avec variable à incrémenter
    Par snoop dans le forum Linux
    Réponses: 2
    Dernier message: 19/03/2004, 11h07
  5. Cacher Variable Url avec Variable Globale
    Par danuz dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/09/2003, 17h20

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