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 :

probleme passage variable dans le même module


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 23
    Points : 13
    Points
    13
    Par défaut probleme passage variable dans le même module
    Bonjour tout le monde,

    J'ai un problème de transmission de variables dans le même module et la même action dans mon layout.php j'ai définis les liens par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="<?php echo url_for('@main_menu?menu=empcli');?>">EmpCli</a>
    Puis je voudrais selon la variable que j'ai transmis dans le lien,
    puis je voudrais la récupérer dans la même page en faisant un test avant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       <?php if($menu = $_GET["menu"]):?>
       <?php include_partial('@main_menu?menu=empcli') ?>
       <?php endif;?>
    ainsi dans le partial je pourrais récupérer le cotenu de la variable etc..

    voici mo fichier routing.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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    main_menu:
      url:   /main/:menu
      class: sfRequestRoute
      param: { module: main, action: index }
      requirements:
        sf_method: [get]
     
    privilege:
      class: sfDoctrineRouteCollection
      options:
        model:                Privilege
        module:               privilege
        prefix_path:          /privilege
        column:               idprivilege
        with_wildcard_routes: true
     
    employe:
      class: sfDoctrineRouteCollection
      options:
        model:                Employe
        module:               employe
        prefix_path:          /employe
        column:               idemploye
        with_wildcard_routes: true
     
     
    # generic rules
    # please, remove them by adding more specific rules
    homepage:
      url:   /
      param: { module: main, action: index }
     
    #default_index:
    #  url:   /:module
    #  param: { action: index }
     
    #default:
    #  url:   /:module/:action/*
    L'erreur que j'obtient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Notice: Undefined index: menu in C:\dev\sfprojects\gestAvocat\apps\backend\modules\main\templates\indexSuccess.php on line 5
    Merci d'avance

  2. #2
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Je ne suis pas bien sur de comprendre l'intérêt de la chose, mais bon.


    D'abord, sous symfony, on n'utilise jamais de $_GET, d'abord, c'est trop peu sécurisé, ensuite, il est possible d'intégrer les variables dans les "route" et le $GET_, dans les routes, il la perd (la route !).


    Ensuite tu nous parles d'une erreur dans l'indexSuccess mais laquel est-ce, quoique, pour le coup, j'ai plus que ma petite idée...


    Comment récupérer les données sise dans l'url dans symfony. Cette tâche est dévolue au contrôleur, dans ton cas, la méthode (code non testé)
    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
     
    ...
       public function executeIndex(sfWebRequest $request)
       {
          // Recherche le partial a lancer
          $partialNames = array('titi', 'tutu', 'coucou',...);
          foreach ( $partialNames as $partial )
          {
             if ( $request->hasAttribute( $partial ) )
             {
                $this->partialName = $partial;
                $this->partialData = array('donnee' => $request->getAttribute( $partial ) );
                break;
             }
          }
          // vérifie qu'il y a un partial
          $this->forward404If( null == $this->partialName )
       }
    A la fin de cette action nous avons donc deux variables qui vont être transmises à notre indexSuccess.php. Lequel deviendra :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      ...
      <?php include_partial($partialName, $partialData ) ?>
      ...
    Il n'est plus nécessaire, dans le template de tester quoi que cela soit. Plus clair.

    Et dans le partial, on accèdes aux données par un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      <?php echo $donnee ?>
    Ce code devrait fonctionner. Mais je ne sais toujours diablement pas ce que tu comptes en faire et le mot "menu" dans ton message me trouble passablement...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 23
    Points : 13
    Points
    13
    Par défaut réponse
    voilà j'ai beau essayé votre solution, je sais qu'on doit passer par le controleur là je reformule mon message (donc on a dit qu'on a un lien dans la page d'accueil)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
     
    <a href="<?php echo url_for('@main_menu?menu=empcli');?>"><acronym title="Employ&eacute;s et Clients"><img src="/images/kuser.png" alt="" style="margin:5px 10px;" width="64" height="64" align="right" class="imgBorder" /></acronym></a> 
               <a href="<?php echo url_for('@main_menu?menu=dosaud');?>"><acronym title="Dossiers et Audiences"><img src="/images/dossier.png" alt="" style="margin:5px 10px;" width="64" height="64" align="right" class="imgBorder"/></acronym></a> 
     
    .......
    Mon fichier routing.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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    main_menu:
      url:   /main/:menu
      class: sfRequestRoute
      param: { module: main, action: index }
      requirements:
        sf_method: [get]
     
    privilege:
      class: sfDoctrineRouteCollection
      options:
        model:                Privilege
        module:               privilege
        prefix_path:          /privilege
        column:               idprivilege
        with_wildcard_routes: true
     
    employe:
      class: sfDoctrineRouteCollection
      options:
        model:                Employe
        module:               employe
        prefix_path:          /employe
        column:               idemploye
        with_wildcard_routes: true
     
     
    # generic rules
    # please, remove them by adding more specific rules
    homepage:
      url:   /
      param: { module: main, action: index }
     
    #default_index:
    #  url:   /:module
    #  param: { action: index }
     
    #default:
    #  url:   /:module/:action/*
    dans mon indexSucees.php je devrais avoir un seul partial mes les paramètres changent selon l'url dont j'ai cliqué
    Exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //1er cas
    include_partial('empclient', array('menu'=>'empcli'))
    //2ème cas
    include_partial('empclient', array('menu'=>'dosaud'))
    //etc....le deuxième paramètre il change selon le lien dont je clique
    là je ne sais pas comment récupérer le paramètres menu transmis dans l'url dans le controleur??

    puis est ce que la route que j'ai défini @main_menu est bien correcte je l'ai défini pour pouvoir transmettre la valeur à la même page


    Merci pour votre aide, c la première fois que j'utilise symfony,
    Images attachées Images attachées  

  4. #4
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Avec les infos que je t'ai donné, tu as ce qu'il te faut pour construire.

    Par contre, je ne pense pas que cela soit la bonne méthode.

    En effet, le menu ne dépend pas de l'option cliqué mais de la page affichée. Voyons le cas d'une personne qui décide de changer de page et d'écrire directement le nom de l'url, avec ton système, il pourrait très bien ce retrouver avec le menu A, mais le module qui s'attend au menu B...

    Je suppose que le menu en haut et le menu a gauche sont généré par le layout. Le problème étant que le layout ne sait pas ce qui va s'afficher au centre, et que ce qui s'affiche au centre, s'y affiche trop tard pour afficher le bon menu. Quoique...

    En effet, en plus des partials et compoments, il existe un outils très pratique pour cela, c'est le slot. Le slot permet de réserver un espace qui sera remplit après la réservation. Donc de réserver la place pour le menu de gauche, qui sera rempli par le template du module...

    Dans le layout.php, là où l'on veut le menu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?php include_slot('menu_gauche', 'Pas de menu définis') ?>
    Le deuxième argument est une valeur par défaut, si le slot n'est pas définit avant la fin de la génération de la page.

    Dans le template de chaque module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php slot('menu_gauche') ?>
       <?php include_partial('empclient', array('menu'=>'empcli')) ?>
    <?php end_slot() ?>
    On doit pouvoir abréger en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?php slot('menu_gauche', include_partial('empclient', array('menu'=>'empcli')) ) ?>
    Vu qu'il y a deux arguments, le deuxième indiquant le contenu du slot, pas de end_slot.

    Et je pense que les menus devraient être stocké dans un module a part, appelons le menu, chaque menu dans un partial particulier. L'appel devenant alors : include_partial('menu/empcli') ou include_partial('menu/dosaud").

    Plus rien ne circule dans l'url et on est sur que la page (le module) affiche toujours le bon menu.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 23
    Points : 13
    Points
    13
    Par défaut réponse
    Merci pour votre réponse, c'est généreux de votre part

  6. #6
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    C'est en avancent tous ensemble que nous irons le plus loin.

Discussions similaires

  1. [XL-2003] Pas de passage d'une macro à une autre dans un même module
    Par FCL31 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 04/09/2009, 14h18
  2. passage variable dans page
    Par naje83 dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 04/05/2007, 18h31
  3. bean:define pour passage variable dans function javascript
    Par fbuchwalder dans le forum Struts 1
    Réponses: 2
    Dernier message: 06/11/2006, 18h36
  4. probleme passage parametre dans l'url IE
    Par kurthectic dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/04/2006, 15h40
  5. Réponses: 2
    Dernier message: 04/01/2004, 15h14

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