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 :

Champ select formulaire symfony [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 161
    Par défaut Champ select formulaire symfony
    Bonjour à tous,

    Je viens chercher de l'aide sur l'utilisation d'un champ select en symfony.
    J'utilise la version symfony 2.8.3 et php7.0.0. Je travaille sur Mac.

    En effet, j'aimerai traduire une page de mon site (page d'accueil par exemple). Je souhaite utiliser un champ select de formulaire qui me permet d'afficher mes choix de langue (FR, EN).
    J'aimerais mettre des liens dans mes options pour que quand je choisis une langue qu'il me redirige vers la page langue.html.twig par exemple.

    J'ai essayé de faire ceci avec un simple formulaire dans mon fichier Twig:

    TWIG:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
         <form action="" method="post">
              <select>
                   <option value-"{{ path('myapp_choisir_langue', {'langue' : 'fr'}) }}">FR</option>
                   <option value-"{{ path('myapp_choisir_langue', {'langue' : 'fr'}) }}">EN</option>
              </select>
         </form>
    J'ai deux questions :
    - la première : c'est de savoir si mon formulaire est correcte?
    - la deuxième : comment utiliser les forms symfony avec l'attribut (entity ou choice) pour afficher mon formulaire select avec mes options renvoyant vers mes liens?

    J'ai d'autres questions mais d'abord je souhaiterais résoudre ces deux là en premier.

    Merci par avance !

    Cdlt,

  2. #2
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    (1) déjà, je pense que si ton formulaire ne fait rien d'autres que diriger vers d'autres pages tu peux laisser comme ça.
    en effet, un formulaire Symfony est utile pour la validation, pour l'enregistrement en base...

    la balise form ne sert à rien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
              <select>
                   <option value="{{ path('myapp_choisir_langue', {'langue' : 'fr'}) }}">FR</option>
                   <option value="{{ path('myapp_choisir_langue', {'langue' : 'en'}) }}">EN</option>
              </select>
    et tu as besoin d'un peu de jQuery ou javaScript pour detecter le changement de valeur sur le select et rediriger vers l'url de value

    (2) tu pourrais faire un formulaire avec un select FR, EN ( mais tu n'as pas besoin d'entité)

    tu récupère le choix de ton select dans une action du controlleur.
    et en fonction du choix fr ou en, tu redirige vers tel ou tel url....

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 161
    Par défaut
    Bonjour Dukoid,

    Je te remercie pour ta réponse. Je ferai des modifications et en cas de besoin je reviendrai vers toi.
    J'ai pris note de tout ce que tu m'avais dit.

    Cdlt,

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 161
    Par défaut
    Bonjour Dukoid,

    Je reviens vers toi pour que tu m'expliques comment récupérer le choix de mon select dans l'action de mon controlleur en fonction du choix fr ou en.
    J'utilise le bundle JMSI18nRoutingBundle pour récupérer automatique mes locales dans les routes. Je suis bloqué quand qu'il s'agit de choisir dans mon select le l'option fr ou en et que ma page change automatique.

    Merci par avance.

    Cdlt,

  5. #5
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    vu que tu as choisis la solution 2 :

    dans une action, tu dois créer un formulaire que tu passes à la vue
    dans la vue tu affiches le formulaire
    au submit tu envois le resultat à une action qui va lire le formulaire et en fonction du choix rediriger vers tel ou tel endroit.

    regarde la doc symfony, formulaire sans entité

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 161
    Par défaut
    Rebonjour,

    Merci Dukoid de ta réponse.
    J'ai procédé de cette manière (ci-dessous mon code). Normalement si je choisi une de mes option dans mon champ select ça devrait changer de langue.
    Mais pour l'instant ça ne fonctionne pas.

    Mes fichiers :

    # app/Resources/views/navbar.html.twig

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
           <select class="btn btn-default dropdown-toggle blue-kidscode">
                  {% if (app.request.getLocale()) == 'fr' %}
                  <option value="#" class="active">FR</option>
                  <option value="{{ path(app.request.get('_route'), app.request.get('_route_params')|merge({'_locale': 'en'})) }}">EN</option>
                  {% endif %}
                  {% if (app.request.getLocale()) == 'en' %}
                  <option value="{{ path(app.request.get('_route'), app.request.get('_route_params')|merge({'_locale': 'fr'})) }}">FR</option>
                  <option value="#" class="active">EN</option>
                  {% endif %}
           </select>
    # app/config/config.yml

    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
     
      # Put parameters here that don't need to change on each machine where the app is deployed
     # http://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
     
     parameters:
        locale: fr
        locale: en
     
     framework:
         #esi:             ~
         #translator:      { fallbacks: ["%locale%"] }
         translator:      { fallbacks: ["%locale%"] }
         secret:          "%secret%"
         router:
             resource: "%kernel.root_dir%/config/routing.yml"
    # src/MainBundle/Resources/config/routing.yml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        re_main:
           path:     /site
           path:     /{_locale}/site
           defaults: { _controller: MainBundle:Default:index }
           requirements:
            _locale: fr|en
    Et mes deux fichiers messages(.xlf):

    # app/Resources/translations/messages.fr.xlf

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    <?xml version="1.0" encoding="utf-8"?>
    <xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
      <file source-language="en" target-language="fr" datatype="plaintext" original="file.ext">
        <header>
          <tool tool-id="symfony" tool-name="Symfony"/>
        </header>
        <body>
          <trans-unit id="7e02f91689d97c04d34f91d4f3517136" resname="menu.accueil">
            <source>menu.accueil</source>
            <target>accueil</target>
          </trans-unit>
          <trans-unit id="82040cdd46bd9994e97df749e999e059" resname="menu.education">
            <source>menu.education</source>
            <target>éducation par le jeu</target>
          </trans-unit>
          <trans-unit id="4a2b84acdbfedca1cbfba868be03bdf3" resname="menu.cours">
            <source>menu.cours</source>
            <target>cours en ligne</target>
          </trans-unit>
          <trans-unit id="03fa763e319ee756f1e1a54c97d2bfce" resname="menu.equipe">
            <source>menu.equipe</source>
            <target>notre équipe</target>
          </trans-unit>
        </body>
      </file>
    </xliff>
    # app/Resources/translations/messages.en.xlf

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    <?xml version="1.0" encoding="utf-8"?>
    <xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
      <file source-language="en" target-language="en" datatype="plaintext" original="file.ext">
        <header>
          <tool tool-id="symfony" tool-name="Symfony"/>
        </header>
        <body>
          <trans-unit id="7e02f91689d97c04d34f91d4f3517136" resname="menu.accueil">
            <source>menu.accueil</source>
            <target>Home</target>
          </trans-unit>
          <trans-unit id="82040cdd46bd9994e97df749e999e059" resname="menu.education">
            <source>menu.education</source>
            <target>Education by game</target>
          </trans-unit>
          <trans-unit id="4a2b84acdbfedca1cbfba868be03bdf3" resname="menu.cours">
            <source>menu.cours</source>
            <target>Online courses</target>
          </trans-unit>
          <trans-unit id="03fa763e319ee756f1e1a54c97d2bfce" resname="menu.equipe">
            <source>menu.equipe</source>
            <target>Our team</target>
          </trans-unit>
        </body>
      </file>
    </xliff>

  7. #7
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    ouille ! je ne sais pas ou tu vas.......

    regarde le chapitre V :
    http://j-place.developpez.com/tutori...symfony2/#LV-A

    ou alors la méthode classe, bonne pratique ici :
    http://www.benjaminschied.fr/changer...ans-symfony-2/

    c'est exactement ce que tu veux faire, non ?



    et des explications diverses ici :
    http://www.supinfo.com/articles/sing...-avec-symfony2

    et là :
    http://symfony.com/doc/current/book/translation.html

    en général, quand t'essayes de faire un truc regarde si il existe des tutos, des infos ....

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 161
    Par défaut
    J'ai suivi le même exemple de ce lien:

    https://github.com/DamienChiboub/sym...19727f5ad3020c

    Mon code ce n'est pas du n'importe quoi.

  9. #9
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    d'accord, c'est une méthode ou la langue apparaît dans l'url donc : .../fr/monsite ou .../en/monsite
    perso, j'utiliserai plutôt la méthode des tutos des liens que je t'ai donné. le visiteur n'as pas besoin de savoir quel langue est utiliser dans l'url.


    tu dois nous expliquer quel méthode tu as choisis, nous dire ou tu prends tes sources et nous indiquer précisément qu'est ce qui ne marche pas , quelle est l'erreur ......
    si tu te contente à balancer du code comme ça sans rien nous dire, personne n'aura envie de t'aider..... parceque comme tout le monde on ne va pas passer 2 heures à essayer de comprendre ce que tu veux faire exactement.

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 161
    Par défaut
    J'ai appliqué ce tutoriel à la lettre : http://j-place.developpez.com/tutori...symfony2/#LV-A.

    Mais mon problème c'est au niveau du choix d'une option du champ select que ça ne marche pas. Avec les liens ça marche. Mais je n'utilise pas de liens.
    C'est pour ça dès mon premier message j'ai bien demandé si le fait de mettre un lien symfony (path) marche avec les options (champ select formulaire).

    Je n'ai pas besoin de créer la page : choisirLangue.html.twig car j'utilise une seule (la home.html.twig).

    J'ai besoin de savoir comment faire avec le select. Quand je change d'option ça ne me traduit pas ma page.

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
          <select class="btn btn-default dropdown-toggle blue-kidscode">
                  <option value="{{ path('front_pagelangue', {'langue' : 'fr'}) }}">FR</option>
                  <option value="{{ path('front_pagelangue', {'langue' : 'en'}) }}">EN</option>
          </select>

    Merci

  11. #11
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
         <select id="select" class="btn btn-default dropdown-toggle blue-kidscode">
                  <option value="{{ path('front_pagelangue', {'langue' : 'fr'}) }}">FR</option>
                  <option value="{{ path('front_pagelangue', {'langue' : 'en'}) }}">EN</option>
          </select>
    
    
          <javascript.....>
    
              alert(    $("#select").val()  );
           </....>


    tu veux dire que quand tu select une langue , ça fais rien ?
    si c'est ça c'est normal. comme je t'ai dis il faut mettre un peu de javascript ou jquery pour que ça marche.

    parceque là, tu vois : tu selectionne ta langue ok voilà elle est sélectionné c'est bien.

    mais il faut faire en sorte qu'après la selection tu dois rediriger vers l'url du value. ça {{ path('front_pagelangue', {'langue' : 'fr'}) }} ou ça {{ path('front_pagelangue', {'langue' : 'en'}) }}.

    tu peux faire ça en jquery de preference(regarde window.location).

  12. #12
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 161
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        $(document).ready(function(){
                        $('#selectUrl').change(function() {
                           $("option[value='fr']").val("{{ path('front_pagelangue', {'langue' : 'fr'}) }}");
                           $("option[value='en']").val("{{ path('front_pagelangue', {'langue' : 'en'}) }}");
                        });
         });
    Je n'ai pas encore tester.

  13. #13
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    non !

    comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     $(document).ready(function(){
                        $('#selectUrl').change(function() {
                           window.location=$(this).val();         // redirige vers la value(donc l'url) qui a été sélectionné
                        });
         });

  14. #14
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 161
    Par défaut
    Ok merci bcp!

    Désolé pour j'ai eu un problème de connexion.
    Je ferai le test et je te dirai quoi après.

    A+

  15. #15
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 161
    Par défaut
    Re,

    J'ai une erreur quand je sélectionne une langue. Ça me renvoie à cette erreur:
    Attempted to call an undefined method named "setLocale" of class "Symfony\Component\HttpFoundation\Session\Session".
    Dans mon code la ligne d'erreur est celle soulignée mise en rouge ci-dessous :

    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 choisirLangueAction($langue = null)
    {
        if($langue != null)
        {
            // On enregistre la langue en session
            $this->container->get('session')->setLocale($langue);
        }
    
        // on tente de rediriger vers la page d'origine
        $url = $this->container->get('request')->headers->get('referer');
        if(empty($url)) {
            $url = $this->container->get('router')->generate('myapp_accueil');
        }
        return new RedirectResponse($url);
    }

  16. #16
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 161
    Par défaut
    Re,

    J'ai choisi la méthode class sur ce lien que tu m'as donné : http://www.benjaminschied.fr/changer...ans-symfony-2/ et ça marche.
    Merci bcp @Dukoid pour tout ce temps que tu m'as consacré.

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

Discussions similaires

  1. plusieurs champs select formulaire
    Par serna dans le forum Langage
    Réponses: 19
    Dernier message: 27/01/2010, 17h36
  2. Modification d'un champ select dans un formulaire
    Par bachboucha dans le forum Langage
    Réponses: 3
    Dernier message: 06/05/2009, 15h46
  3. Réponses: 2
    Dernier message: 16/04/2009, 11h00
  4. [MySQL] Mettre un champ selected dans un formulaire de type select
    Par bl4ckwolf dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 19/07/2007, 16h11
  5. [Formulaires] Mise en forme champs <select>
    Par zakuli dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 29/11/2006, 07h36

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