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 :

prefix locale dans toutes les url [4.x]


Sujet :

Symfony PHP

Vue hybride

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 156
    Par défaut prefix locale dans toutes les url
    Bonjour à tous,

    J'ai un projet en Symfony 3.4.29 qui marche bien, et je le migre vers Symfony 4.3.2

    J'ai un problème pour préfixer toutes mes routes par _locale

    J'ai le message
    No route found for "GET /fr/visit"
    avec l'url : index.php/fr/visit

    Mais l'url index.php/visit m'affiche bien ma page, en anglais. Donc la définition de mon préfixe n'est pas prise en compte.

    Dans toutes les docs que je trouve sur le web, ça devrait directement marcher, mais ça fait des jours que je ne trouve pas !

    Ai je oublié un paramètre quelque part pour que ça prenne en compte mon annotation ?
    Sinon vous avez des idées ?

    Voici des extraits de mon code :

    route.yaml

    Code yaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    index:
        path:     /visit
        defaults: 
            _controller: App\Controller\VisitController::visit_accueil
        requirements:
            _locale: '%app_locales%'

    annotations.yaml

    Code yaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    controllers:
        resource: ../../src/Controller/
        type: annotation
        prefix:   /{_locale}
        requirements:
            _locale: '%app_locales%'
        defaults:
            _locale: '%locale%'

    services.yaml

    Code yaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    parameters:
        locale: fr
        app_locales: fr|en|

    Merci d'avance pour votre aide !

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Par défaut
    Bonjour,
    No route found for "GET /fr/visit"
    dans le routing de cette action tu n'as pas défini de préfixe. Il suffit de faire précéder visit par {_locale} comme suit:
    Code yaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    index:
        path:     /{_locale}/visit  
        defaults: 
            _controller: App\Controller\VisitController::visit_accueil
            _locale: '%locale%' 
        requirements:
            _locale: '%app_locales%'

    dans annotations.yaml
    Code yaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #annotations.yaml
    controllers:
        resource: ../../src/Controller/
        type: annotation
        prefix:   /{_locale}
        requirements:
            _locale: '%app_locales%'
        defaults:
            _locale: '%locale%'

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 156
    Par défaut
    Bonjour,

    Merci beaucoup pour tes indications

    Là, je ne suis pas chez moi, je n'ai pas mon projet sous la main, je ne peux pas essayer.
    Je suis d'accord sur ce que tu dis, ça devrait marcher, j'essaie dès que je peux...

    Mais je veux le préfixe {_locale} pour toutes mes routes, sans avoir à le préciser pour chaque route.
    D'après ce que j'ai compris, mon annotation prefix dans le fichier annotations.yaml devrait suffire.
    Mais ça ne marche pas !

    C'est moi qui ai mal compris, il faut ajouter {_locale} dans chaque route ?
    Ou il y a un moyen de définir quelque part mon prefix pour toutes les routes ?

    Merci d'avance !

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Par défaut
    Indépendamment de l'internalisation tu exposes 2 types de routing différents: un routing par configuration via le fichier routes.yaml et un autre par annotation avec annotations.yaml.
    Dans le 1er cas, routage par configuration, qui comporte qu'une seule route laquelle route appelle l'action visit_accueil. Si tu souhaites préfixer le chemin de l'url menant à l'action visit_accueil il te faut alors déclarer la _locale dans le paramètre de la route path: /{_locale}/visit. En fait c'est {_locale} qui permet de modifier dynamiquement la langue depuis l'url et doit être présente sur n'importe quelle route que tu déclares.

    Dans le second cas, routage par annotation, tu as préfixé les ressources (resource: '../src/Controller/') par la {_locale}. N'importe quel contrôleur situé dans le dossier src/Controller/ est déjà préfixé inutile d'en rajouter dans les contrôleurs sauf si tu souhaites avoir des urls spécifiques pour chaque langues.

    tu peux récupérer le projet Symfony demo sur github et t'en inspirer.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 156
    Par défaut
    Merci beaucoup pour ta réponse et tes explications

    En effet, je mélangeais les routes et les annotations.
    Je n'ai pas besoin de préfixer mes contrôleurs, j'ai donc ajouté dans toutes mes routes le préfixe /{_locale} et ça marche nickel !

    Et merci pour l'idée d'aller voir la démo de Symfony sur Github, je n'y pense jamais Il va falloir que je prenne ce réflexe !

    Merci encore !

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 156
    Par défaut
    Bonjour,

    Je reviens sur mon problème pour comprendre comment ça marche...

    Ok, en SF4, j'ai préfixé toutes mes routes (dans le fichier config/routes.yaml) par /{_locale} et ça marche bien.

    Mais en SF3, je n'avais pas ce préfixe dans mon fichier des routes (src/monprojetBundle/Resources/config/routing.yml).
    Et j'avais le code suivant dans : app/config/routing.yml

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

    Est ce possible de faire l'équivalent sous SF4 ?

    J'ai essayé sous SF4 en mettant dans le champ resource la valeur : "@config/routes.yaml" (dans le fichier config/routes/annotations.yaml).

    Code yaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    routes:
        resource: "@config/routes.yaml"
        type: annotation
        prefix: /{_locale}
        requirements:
            _locale: '%app_locales%'
        defaults:
            _locale: '%locale%'

    Mais ça ne marche pas, j'ai le message d'erreur suivant :

    An exception has been thrown during the rendering of a template ("Bundle "config" does not exist or it is not enabled. Maybe you forgot to add it in the registerBundles() method of your App\Kernel.php file? in @config/routes.yaml (which is being imported from "/home/moi/wwwroot/monprojet_v4/config/routes/annotations.yaml"). Make sure the "config" bundle is correctly registered and loaded in the application kernel class. If the bundle is registered, make sure the bundle path "@config/routes.yaml" is not empty.").
    Cette possibilité de préfixer les routes a été perdue au passage vers SF4, ou il me manque quelque chose ?

    Merci d'avance pour votre aide !

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/07/2006, 09h44
  2. [VBA-E] Supprimer le cont de cellules dans toutes les feuill
    Par Tartenpion dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/03/2006, 09h44
  3. bizarerie dans toutes les requetes
    Par zais_ethael dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 09/03/2006, 21h28
  4. Comment MAJ le même champ présent dans toutes les tables ?
    Par PamelaGeek dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 02/02/2006, 14h06

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