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 :

Rajout de la locale(fr ou en) par défaut dans URL pour site International


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Symfony 2.8
    Inscrit en
    Mai 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Symfony 2.8

    Informations forums :
    Inscription : Mai 2016
    Messages : 8
    Points : 9
    Points
    9
    Par défaut Rajout de la locale(fr ou en) par défaut dans URL pour site International
    je vous explique mon problème :

    J'ai un site qui est sur le français est qui est déjà déployer sur le net, sauf que pour l'instant je dois le passer à l’international alors je dois avoir quelque chose comme ceci:

    www.monSite.com/fr // pour le site français ( ici monSIte.com c'est juste pour l'exemple c'est pas mon vrai site )

    et

    www.monSite.com/en // pour l'international

    1 ere Problème : (Résolu)

    je veux que si quelqu'un essayer d'accéder à l'ancien adresse du site c'est-a-dire www.monSite.com on devrais lui envoyer vers www.monSite.com/fr directement

    Alors ce problème la est régler(merci symfony) en faisant comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    MonSiteBundle:
        resource: "@MonSiteBundle/Controller/"
        type:     annotation
        prefix:   /{_locale}
        requirements:
            _locale: |fr|en|es|zh
        defaults:
            _locale: fr
    2 eme Problème : (pas Résolu)

    Je veux que si quelqu'un essayer d'accéder à une ancienne page par-exemple www.monSite.com/maPage on lui envoie directement vers www.monSite.com/fr/maPage

    Donc voila je veux que si quelqu'un essaye d'accéder à www.monSite.com/maPage depuis URL on lui redirige directement vers www.monSite.com/fr/maPage.

    Le problème en ai que, si j'essaye d'accéder a cette dernier il m'affiche une error404 Page not found.

    J’espère que j'étais assez claire. En attendant vos retour, mes salutations.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut
    Salut,
    ce je propose pour le 2 éme problème .
    je suppose que tu as une action et une route pour : www.monSite.com/maPage
    on crée une nouvelle action avec une route pour: www.monSite.com/fr/maPage. et un param {_locale}
    un petit changement pour la premiere action , redirectTo la seconde route avec en parametre la locale.
    la locale peut être initialisé a 'fr' ( valeur par Default )

  3. #3
    Membre chevronné

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 576
    Points : 1 989
    Points
    1 989
    Par défaut
    Bonjour,

    Pourquoi ne pas passer par le fichier .htaccess?

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Symfony 2.8
    Inscrit en
    Mai 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Symfony 2.8

    Informations forums :
    Inscription : Mai 2016
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par MehrezLabidi Voir le message
    Salut,
    ce je propose pour le 2 éme problème .
    je suppose que tu as une action et une route pour : www.monSite.com/maPage
    on crée une nouvelle action avec une route pour: www.monSite.com/fr/maPage. et un param {_locale}
    un petit changement pour la premiere action , redirectTo la seconde route avec en parametre la locale.
    la locale peut être initialisé a 'fr' ( valeur par Default )
    Tout d'abord je tiens à te remercier pour ton retour "3aychek"

    si j'ai bien compris je dois dupliquer mes actions mais sauf que j'en ai vraiment beaucoup. Mais je viens d'avoir une idée, parcontre shé pas si c'est possible:

    je créer une seul action dans le quelle je dois rentrer si jamais j'ai une erreur 404 et je récupére l'URL précédemment demander et j’insère dans cette URL la langue(fr ou en) et je test le status de cette URL.

    Qu'est ce que vous pensez ???

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Symfony 2.8
    Inscrit en
    Mai 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Symfony 2.8

    Informations forums :
    Inscription : Mai 2016
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par kevin254kl Voir le message
    Bonjour,

    Pourquoi ne pas passer par le fichier .htaccess?
    J'avoue que je n'est jamais touché a ce fichier. pourrais-tu nous éclaircir en peux sur le fonctionnement de ce fichier, merci d'avance.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut
    Citation Envoyé par idis007 Voir le message
    j’insère dans cette URL la langue(fr ou en) et je test le status de cette URL.
    absolument je sais pas si c'est faisable en symfony.
    Je recommande pas la proposition de fichier htaccess pour la seule raison, 'fr' est un paramètre qui peut être ultérieurement 'en' donc on peux pas raisonner statiquement.

    Pour une adresse URL correspond une route et une action contrôleur c'est simple , c'est le MVC .
    J'ai pensé au plus simple possible,
    Si je mets au navigateur www.monSite.com/maPage , une action au derrière qui me retourne juste vers www.monSite.com/fr/maPage qui corresponds a ton action d'origine

    le redirectTo aura comme paramètre la locale pour la deuxième action
    Donc la première action contient juste le redirect vers la deuxième , aucun autre traitement

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Symfony 2.8
    Inscrit en
    Mai 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Symfony 2.8

    Informations forums :
    Inscription : Mai 2016
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par MehrezLabidi Voir le message
    absolument je sais pas si c'est faisable en symfony.
    Je recommande pas la proposition de fichier htaccess pour la seule raison, 'fr' est un paramètre qui peut être ultérieurement 'en' donc on peux pas raisonner statiquement.

    Pour une adresse URL correspond une route et une action contrôleur c'est simple , c'est le MVC .
    J'ai pensé au plus simple possible,
    Si je mets au navigateur www.monSite.com/maPage , une action au derrière qui me retourne juste vers www.monSite.com/fr/maPage qui corresponds a ton action d'origine

    le redirectTo aura comme paramètre la locale pour la deuxième action
    Donc la première action contient juste le redirect vers la deuxième , aucun autre traitement
    Ah ok pas mal si j'ai bien compris. Genre une action comme ceci :

    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
     
    public function checkUri(Request $request) 
    {
        $languages = ['fr', 'en', 'es']; // les languages de mon site.
        $uri = $request->getRequestUri();
        $route = $request->get('_route');
     
        foreach ($languages as $language) {
            if (in_array($language, explode('/', $uri))) {
                return $this->redirectToRoute($route); 
            }
        }
     
       // sinon j’insère 'fr' dans la URI et je test l'existance de ce lien ou au pure je l'envoie à la page d'acceuil. 
    }
    Ce bien ce que tu voulais dire ??

  8. #8
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut
    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
    public function checkUri(Request $request) 
    {
           $defaultLocale = 'fr' ;  // par défaut ,la locale est ' fr ' mais peut  etre 'en' si tu a ajouté  // LocaleListener implements EventSubscriberInterface
            // try to see if the locale has been set as a _locale routing parameter
            if ($locale = $request->attributes->get('_locale')) {
                $request->getSession()->set('_locale', $locale);
            } else {
                // if no explicit locale has been set on this request, use one from the session
                $request->setLocale($request->getSession()->get('_locale', $defaultLocale));
            }
    
      // $route est le path pour l'url :  www.monSite.com/fr/maPage , 'fr'  est gereé par '_locale'
        return $this->redirectToRoute($route, array('_locale'=> $locale)); // la locale va être propagé durant la session courante
    }

  9. #9
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Bonjour !

    Je ne suis pas expert symfony, mais il me semble que la "bonne" solution serait plutôt un event listener...

    Overall, the purpose of the kernel.request event is either to create and return a Response directly, or to add information to the Request (e.g. setting the locale or setting some other information on the Request attributes).
    http://symfony.com/doc/current/compo...tp_kernel.html

Discussions similaires

  1. [C#] Paramètre par défaut dans une fonction
    Par RobinJulie dans le forum Windows Forms
    Réponses: 5
    Dernier message: 18/01/2012, 14h07
  2. Valeur par défaut dans un DbLookupCombobox
    Par defluc dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/09/2005, 14h04
  3. [Débutant(e)]valeur par défaut dans méthodes
    Par seiryujay dans le forum Langage
    Réponses: 3
    Dernier message: 13/07/2005, 12h02
  4. Sélection valeur par défaut dans une zone de liste
    Par Cécile154 dans le forum IHM
    Réponses: 2
    Dernier message: 15/02/2005, 18h20
  5. Valeur par défaut dans une table objet
    Par Ricky81 dans le forum Oracle
    Réponses: 12
    Dernier message: 18/03/2004, 11h52

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