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

Zend Framework PHP Discussion :

Plusieurs paramètre avec Zend_Controller_Router_Route_Regex [ZF 1.11]


Sujet :

Zend Framework PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur

    Homme Profil pro
    Technical Lead Salesforce
    Inscrit en
    Février 2009
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technical Lead Salesforce

    Informations forums :
    Inscription : Février 2009
    Messages : 563
    Par défaut Plusieurs paramètre avec Zend_Controller_Router_Route_Regex
    Bonjour, je suis en train de ré-écrire mes url sur mon site internet pour améliorer mon référencement et pour ça, un fichier de configuration dans lequel je définie mes routes.

    Seulement, pour l'une de mes routes, j'ai 3 paramètres à passer et donc j'utilise une du type 'Zend_Controller_Router_Route_Regex', seulement, pour le champ route et le champ reverse, je ne sais pas trop comment faire comme j'ai 3 identifiants à faire passer, j'y arrive pour un identifiant et du texte mais pas 3 identifiants.

    Voici la définition de ma route :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    routes.portfolio.type = Zend_Controller_Router_Route_Regex
    routes.portfolio.route = "portfolio/(/.d)"
    routes.portfolio.defaults.controller = index
    routes.portfolio.defaults.action = portfolio
    routes.portfolio.map.1 = idEntreprise
    routes.portfolio.map.2 = idGenre
    routes.portfolio.map.3 = page
    routes.portfolio.reverse = "portfolio/%d"
    Je souhaiterais que ma route ressemble à quelque chose comme ça :
    portfolio/idEntreprise/idGenre/page
    Qu'est-ce que je dois changer sur mes champs reverse et route svp?
    - Mes articles
    - Consultant technique Salesforce
    - Salesforce Certified Administrator
    - Salesforce Certified Platform App Builder
    - Salesforce Certified Developper I
    - Salesforce Certified Sales Cloud
    - Salesforce Certified Service Cloud

  2. #2
    Membre chevronné

    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2003
    Messages : 253
    Par défaut
    Bonjour,

    A mon avis, tu as un problème de regexp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    routes.portfolio.type = Zend_Controller_Router_Route_Regex
    routes.portfolio.route = "portfolio/(\d+)/(\d+)/(\d+)"
    routes.portfolio.defaults.controller = index
    routes.portfolio.defaults.action = portfolio
    routes.portfolio.map.1 = idEntreprise
    routes.portfolio.map.2 = idGenre
    routes.portfolio.map.3 = page
    routes.portfolio.reverse = "portfolio/%d/%d/%d"
    Marchera à mon avis un peu mieux, (absolument pas testé de mon côté, c'est plus pour donner l'idée).

    Par contre, je pense qu'une route RegEx est superflue ici (ou alors je n'ai rien compris à la demande ), on peut faire pareil avec une route "classique", moins coûteuse en performance :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    routes.portfolio.type = Zend_Controller_Router_Route_Regex
    routes.portfolio.route = "portfolio/:idEntreprise/:idGenre/:page"
    routes.portfolio.defaults.controller = index
    routes.portfolio.defaults.action = portfolio
    Tu peux rendre un des paramètres optionnel en fournissant une valeur par défaut, comme pour contrôleur et action. D'ailleurs je te conseillerais aussi de fournir le module par défaut, juste pour éviter certains effets de bord désagréable qui pourraient survenir si tu génères une route portfolio depuis une page d'un module autre que default...

  3. #3
    Rédacteur

    Homme Profil pro
    Technical Lead Salesforce
    Inscrit en
    Février 2009
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technical Lead Salesforce

    Informations forums :
    Inscription : Février 2009
    Messages : 563
    Par défaut
    J'ai créé une nouvelle route du coup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    routes.portfolio.type = Zend_Controller_Router_Route
    routes.portfolio.route = "portfolio/:page/:idEntreprise/:idGenre"
    routes.portfolio.defaults.controller = "index"
    routes.portfolio.defaults.action = "portfolio"
    routes.portfolio.defaults.page = 0
    routes.portfolio.defaults.idEntreprise = 0 
    routes.portfolio.defaults.idGenre = 0
    Et comme je l'appelle à plusieurs endroits dans mon site, j'en ai fait une aide de vue que j'appelle, jusque là, tout va bien mais le problème est quand j'utilise une pagination Zend et que j'y fais mes liens, je ne vois qu'un seul entier sur les trois qui est celui de la page mais dans mon url, il n'y a pas celui de l'entreprise ni du genre, il faut modifier quelque chose?

    Pour mieux comprendre, voici le lien vers mon site, il faut se rendre dans l'onglet 'portfolio'.

    Sur le lien 'portfolio' juste en dessous du header, on aperçoit bien les trois valeurs mais une fois dedans, il n'y en a qu'une sur la pagination.
    - Mes articles
    - Consultant technique Salesforce
    - Salesforce Certified Administrator
    - Salesforce Certified Platform App Builder
    - Salesforce Certified Developper I
    - Salesforce Certified Sales Cloud
    - Salesforce Certified Service Cloud

  4. #4
    Membre chevronné

    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2003
    Messages : 253
    Par défaut
    Problème difficile à visualiser en l'état, mais deux petites choses :
    • Pourquoi passer les valeurs par défaut dans l'url de l'onglet ? tu ne penses pas que /portfolio est un peu plus élégant que /portfolio/0/0/0 ?
    • Pourquoi avoir utilisé un view helper pour cette route ? Url() était trop lourd à utiliser ?


    En tout cas sur ce point c'est un peu difficile à répondre dans le sens où on ne connait pas ton Helper, et que le tout semble fonctionnel, car même si les id "disparaissent" de la pagination, c'est uniquement quand la valeur des id est identique à la valeur par défaut (0).

    Par exemple en genre Développement, le lien vers la page 2 est http://www.aurelien-laval.fr/portfolio/2/0/1 ce qui semble normal en l'état. A moins que tu ais déjà résolu le problème ?

  5. #5
    Rédacteur

    Homme Profil pro
    Technical Lead Salesforce
    Inscrit en
    Février 2009
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technical Lead Salesforce

    Informations forums :
    Inscription : Février 2009
    Messages : 563
    Par défaut
    Je suis complètement d'accord que l'url /portfolio est bien plus jolie que /portfolio/0/0/0 mais supposons (je n'ai pas essayé et je ne peux le faire à cette heure) que je n'envoie aucun paramètre à ma route au lieu de mes 0, ca fonctionnera?

    J'ai créé un helper car j'ai plusieurs liens qui pointent dessus donc je les centralises tous vers un helper comme ça le jour où je veux changer la façon dont c'est affiché par exemple, je n'aurais que le helper à modifier.

    Mon helper ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function linkportfolio($page = 0, $idEntreprise = 0, $idGenre = 0)
    {
       return $this->url(array('page' => $page, 'idEntreprise' => $idEntreprise, 'idGenre' => $idGenre), 'portfolio');
    }
    Je n'avais pas remarqué que les id disparaissaient dans la pagination lorsqu'ils sont égales à 0, peut-être que ce n'était pas un problème mais normal en fin de compte..
    - Mes articles
    - Consultant technique Salesforce
    - Salesforce Certified Administrator
    - Salesforce Certified Platform App Builder
    - Salesforce Certified Developper I
    - Salesforce Certified Sales Cloud
    - Salesforce Certified Service Cloud

  6. #6
    Membre chevronné

    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2003
    Messages : 253
    Par défaut
    Je pense qu'avec ton helper tu te complique au final la vie : il faut savoir que le helper Url() conserve par défaut (désactivable via le 3ème paramètre) les paramètres courants. Il n'est donc utile de ne changer que les paramètres qui changent par rapport à la page courante (ce qui peut, quand c'est mal compris et / ou géré, donner lieu à des bugs un peu tordu).

    Avec ton helper ce n'est pas possible : tu es obligé de passer à chaque fois les 3 valeurs... est-ce vraiment un gain de temps ?

    Je pense que pour ta pagination tu utilises Zend_Pagination ? Si oui ça explique qu'il écrive des urls un peu différente dans la pagination car il ne force pas le passage des 3 paramètres, mais uniquement passe uniquement le paramètre page et se contente de réutiliser la requête courante pour les autres paramètres.

    Mon avis ici :
    • Soit passer par $this->url() directement, soit améliorer ton helper pour ne pas passer les paramètres non renseignés (ça t'évitera /portfolio/0/0/0).
    • Pour être tatillon, je remplacerais les valeurs par défaut de 0 par null, qu'on distingue bien une valeur 0 d'une absence de valeur, qui est plus logique quand aucun paramètre n'est fourni.


    J'espère que ça aidera et que ce n'est pas trop obscur...

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/06/2012, 21h12
  2. CR XI : Renseigner plusieurs paramètres avec une seule valeur
    Par jpamy dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 30/01/2009, 14h22
  3. [Struts 1.1][html:link] avec plusieurs paramètres
    Par bbo1991 dans le forum Struts 1
    Réponses: 3
    Dernier message: 21/03/2007, 12h32
  4. [Struts] Html:link avec plusieurs paramètres
    Par mariemor64 dans le forum Struts 1
    Réponses: 2
    Dernier message: 24/05/2006, 14h27
  5. Réponses: 2
    Dernier message: 12/09/2005, 15h33

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