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 :

[Routing] Avoir un préfixe variable pour une ressource externe


Sujet :

Symfony PHP

  1. #1
    Membre actif

    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2009
    Messages : 91
    Points : 223
    Points
    223
    Par défaut [Routing] Avoir un préfixe variable pour une ressource externe
    Salut tout le monde,

    Voilà j'ai rencontré un os avec le routing, ce que je croyais évident ne l'est pas tant que cela.

    J'explique : j'aimerais arriver à donner un préfixe variable à une collection de routes que l'on importe et apparament cela n'est pas prévu.. du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //app/config/routing.yml
     
    test:
     resource: "Bundle/Resources/config/routing.yml"
     prefix: /{var}
     requirements:
      var: foo | bar
    Impossible d'arrive à matcher les routes, pour la génération cela a l'air de bien passer.

    Je fais donc appel à vos claviers pour voir si il y a moyen de tweaker cela, je posterai ici mes trouvailles.

    Merci

    .cwx

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Points : 658
    Points
    658
    Par défaut
    Ca marcherait cela?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    test:
     resource: "Bundle/Resources/config/routing.yml"
     prefix: ["/foo","/bar"]
    Un petit si la réponse convient. Merci.

  3. #3
    Membre actif

    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2009
    Messages : 91
    Points : 223
    Points
    223
    Par défaut
    Malheureusement non. En fouillant le code, on tombe sur les méthodes

    getStaticPrefix()

  4. #4
    Inscrit
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 476
    Points
    476
    Par défaut
    Mais ce qui est marrant, c'est que ca marche avec ton generate. Il te genere foo ou bar ? Ou aleatoire ?

    C'est quoi ton cas d'application ?

  5. #5
    Membre actif

    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2009
    Messages : 91
    Points : 223
    Points
    223
    Par défaut
    Non c'est pas marrant

    Pas vraiment de cas d'application, je testes. Au départ ce que je voulais c'est mettre la locale dans le préfix, cela évite ainsi de mettre cette variable sur toutes les routes du fichier inclus et pouvoir aussi bien employer le bundle avec ou sans la locale dans l'url.

    Donc avec la locale il met automatiquement "en" même si elle est en "fr", il ne prend pas en compte mes requirements pour le préfix et ne prends plus en compte les variables de routes inclues - le bordel quoi !!

    Mon routing.yml dans le dossier /app/config/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    _test_pref:
     resource: "@AcmeDemoBundle/Resources/config/routing.yml"
     prefix: /{_locale}
     requirements:
      _locale: en|fr

    Mon routing inclus
    test_gen:
    pattern: /gen/{id}
    defaults: { _controller: AcmeDemoBundleemo:index, id: 1 }
    requirements:
    id: \d+
    Si je fais une génération mtnt de test_gen cela donnera :

    /app_dev.php/en/gen

    donc il met automatiquement en et ne prend plus en compte l'id

    Edit: Génial, le nom de bundles fait sourire

  6. #6
    Inscrit
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 476
    Points
    476
    Par défaut
    Visiblement, un parametre dans le prefixe n'est pas du tout prevu par symfony De toute facon c'etait previsible, car sinon tu devrais changer les definitions des methodes xxAction de ton controller.
    Mais le use case du {_locale} est pas mal, car independant des methodes xxAction pour le coup. Et ca me parait pas mal de pouvoir charger un bundle accessible uniquement en francais par exemple. Tu veux pas poser la question sur la mailing symfony-users ?

  7. #7
    Membre actif

    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2009
    Messages : 91
    Points : 223
    Points
    223
    Par défaut
    J'ai posé la question à weaverryan, je traduis la doc en fr et je viens de finir la partie routing.

    Je vais voir pour le mailing list

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Points : 658
    Points
    658
    Par défaut
    Il faut uniquement utiliser le pattern on dirait :

    http://symfony.com/doc/2.0/book/tran...le-and-the-url

    le parametre "_locale" est meme utilisable
    Un petit si la réponse convient. Merci.

  9. #9
    Membre actif

    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2009
    Messages : 91
    Points : 223
    Points
    223
    Par défaut
    Ceci t'oblige à spécifier cela dans le pattern pour toutes tes routes, c'est justement ce que je veux éviter, j'aurais aimé pouvoir le mettre dans préfix pour l'appliquer à une collection de routes.

  10. #10
    Membre actif

    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2009
    Messages : 91
    Points : 223
    Points
    223
    Par défaut
    Je vais prendre un exemple concret :

    Je veux ajouter le bundle FOSUserBundle à mon appli, cependant tout le restant de mon appli à une url du genre : /www.app.com/fr/module/action

    En suivant la logique sf2, je n'aurais qu'à inclure le fichier de routing fourni par le bundle.

    Sans vouloir toucher au fichier du bundle, je dois me contenter de ne plus garder une similitude d'url constante sur le site.

    Si je veux garder cette similitude, je dois modifier le core du bundle et donc ne plus rester en sync 100% avec ce bundle (le restant des fonctionnalités pouvant être "overridées".

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Points : 658
    Points
    658
    Par défaut
    Il y a un objet RouteCollection qui possede une variable prefix, est ce que ce serait une piste?

    Ici : http://symfony.com/doc/current/book/routing.html
    Quand on regarde le routing en yml ca donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    blog_show:
        pattern:   /blog/{slug}
        defaults:  { _controller: AcmeBlogBundle:Blog:show }
    Cela ne parle pas des masses; mais si on regarde l equivalent en PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // app/config/routing.php
    use Symfony\Component\Routing\RouteCollection;
    use Symfony\Component\Routing\Route;
     
    $collection = new RouteCollection();
    $collection->add('blog_show', new Route('/blog/{slug}', array(
        '_controller' => 'AcmeBlogBundle:Blog:show',
    )));
     
    return $collection;
    Et la, on serait tenté d utiliser http://api.symfony.com/2.0/Symfony/C...tml#addPrefix()

    A tester...
    Un petit si la réponse convient. Merci.

  12. #12
    Inscrit
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 476
    Points
    476
    Par défaut
    Et oui mais la question reste : tu mets quoi dans ton addPrefix() ?

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Points : 658
    Points
    658
    Par défaut
    je dirais :
    dans la fonction, il y l appel de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $route->setPattern($prefix.$route->getPattern());
    cela devrait se rajouter au pattern global; contrairement au "static prefix" qui est present dans CompiledRoute.

    je ne sais pas tester avant ce soir, sorry
    Un petit si la réponse convient. Merci.

  14. #14
    Membre actif

    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2009
    Messages : 91
    Points : 223
    Points
    223
    Par défaut
    J'ai regardé un peu la classe RouteCollection, elle n'est appelée qu'un seule fois donc pour voir les changements il faut vider le cache même en dev.

    Par contre je ne vois pas trop où tu veux en venir, je vois bien qu'elle ajoute le préfix donné mais je ne vois pas ce que tu veux que je fasse ?

Discussions similaires

  1. [code VBA]passage de variable pour une requête paramétrée
    Par christrabin dans le forum VBA Access
    Réponses: 3
    Dernier message: 13/04/2007, 14h30
  2. [VBA-E]Peut on avoir l'equivalent .controls pour une feuille
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/03/2007, 18h06
  3. Réponses: 4
    Dernier message: 09/01/2007, 11h31
  4. [FLASH MX] nom variable pour une fonction
    Par totoche dans le forum Flash
    Réponses: 2
    Dernier message: 20/12/2005, 14h00
  5. [W3C] Points de suites variables pour une tabulation
    Par jacma dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 11/06/2005, 00h33

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