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 :

transfert de parametre à un form via configure


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut transfert de parametre à un form via configure
    Je commence à désespérer la.

    suite à mes déboires avec les embedForm, il semblerait qu'il faille créer de toute piéce un form pour conserver la sécurité CSRF.

    pour cela j'ai créer un form auxquels je veut transmettre des données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class GrpeChqDejUserListForm extends BaseGrpeChqDejForm
    {
      public function configure($grpeChqDej)
      {
      	$id = $grpeChqDej->getId();  	
      }
    }
    dans mon action je crée mon object et lui assigne une valeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $grpeChqDej=new GrpeChqDej();  	
    $grpeChqDej->setId(1);
     
    $this->form = new GrpeChqDejUserListForm($grpeChqDej);
    je transfere un object donc tout devrait allez..
    bein non, je me recupere cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Strict standards: Declaration of GrpeChqDejUserListForm::configure() should be compatible with that of sfForm::configure() in /home/mu8639/web/sfprojects/it_toolbox/lib/form/GrpeChqDejUserListForm.class.php on line 11
    c'est pourtant un objet que je lui transmet en quoi ça lui pose problème ????

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    C'est une erreur logique de POO en PHP : tu ne peux pas redéfinir une méthode d'une classe parente qui ait une signature différente de celle de sa classe mère.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public function configure($grpeChqDej)
    est faux car la méthode de la classe parente est définie ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public function configure()
    EDIT

    Si je comprends bien, l'objet que tu lui passes en paramètre correspond à l'id du groupe qui est en session ?

    Si tel est le cas, la méthode pas-propre consiste à faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function configure()
    {
      $grpeChqDejId = sfContext::getInstance()->getUser()->getParameter('id');
    }
    (ou quelque chose comme ça).

    Et la méthode propre, je peux te la donner. Mais confirme-moi avant que c'est bien ça que tu veux faire, parce qu'il faut que je fasse une recherche avant et j'ai pas envie de la faire pour rien

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    autant pour moi, j'ai confondu le constructeur et la fonction configure :/

    par contre il y moyen dans cette dernière de récupérer des infos, j'ai tenté:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public function configure()
    {
      	$id = $this['id']->getValue();
      	echo 'id: '.$id;
    }
    pas de message d'erreur mais pas de valeur non plus :/

    Edit: non je pense pas que la valeur se trouve a ce niveau, je la recup d'un lien
    donc mon action c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $request->getParameter('id')
    j'ai une liste de groupe et suivant sur quelle liste je veut afficher je clique sur un lien.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Hm, oui, ça paraît normal non ? Vu qu'en retirant le paramètre de ta méthode, tu n'essayes plus d'initialiser l'id de l'objet du formulaire ?

    En fait, à relire ton code, en fonction de ce que tu veux faire tu as deux façon de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // dans ton actions.class.php
    // $chequeDejeuner : ton instance d'objet
     
    $this->form = new GrpeChqDejUserListForm($chequeDejeuner);
    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
    class GrpeChqDejUserListForm extends BaseGrpeChqDejForm
    {
      public function configure()
      {
          $id = $this->getObjetct()->getId();      
      }
    }
     
    // OU (je ne sais plus lequel doit marcher)
     
    class GrpeChqDejUserListForm extends BaseGrpeChqDejForm
    {
      public function configure()
      {
          $id = $this['id'];      
      }
    }

    Ou bien, s'il s'agit de l'id de ton Groupe en session, rien besoin de faire dans le actions.class.php, mais utiliser une méthode qui te permet de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class GrpeChqDejUserListForm extends BaseGrpeChqDejForm
    {
      public function configure()
      {
          $id = $this->getUser()->getParameter('id');
      }
    }
    EDIT

    Je viens de voir ton edit, donc il faut que j'édite le mien

    RE-EDIT

    Donc je pense qu'il s'agit de la première façon de faire.
    Peut-être même peux-tu remplacer le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // dans ton actions.class.php
    // $chequeDejeuner : ton instance d'objet
     
    $this->form = new GrpeChqDejUserListForm($chequeDejeuner);
    par simplement un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->form = new GrpeChqDejUserListForm(array('id' => $value));
    mais c'est à tester.

    cf. sfForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      /**
       * Constructor.
       *
       * @param array  $defaults    An array of field default values
       * @param array  $options     An array of options
       * @param string $CSRFSecret  A CSRF secret
       */
      public function __construct($defaults = array(), $options = array(), $CSRFSecret = null)

  5. #5
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $id = $this->getObject()->getId();
    marche trés bien, je vais m'en contenter.
    Pour info, en faites je désire migrer une grosse usine a gaz sous symfony et j'ai démarrer par le module le plus complexe pour être sur à la fois de voir si je pouvais vraiment migrer et de bien rentrer dans les rouages de symfony dés le départ.

    Par contre mes chefs sont pas au courant, pour cela que je suis un peu fébrile et je poste facilement

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Si c'est courageux de s'attaquer au plus gros morceau -- et que je comprends la démarche --, ne vaut-il mieux pas pour le moment s'attaquer aux petits morceaux ? Cela te permettrait peut-être :
    - de prendre plus sereinement en main le framework ;
    - de montrer quelques résultats rapides à tes boss, ce qui les rassure en général ?

    Ce n'est que mon avis

  7. #7
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    oui mais le problème c'est que c'est l'appli la plus utilisé..;
    et vu qu' apparemment il n'y pas pas moyen de l'avoir.....voir mon post sur la liste de formulaire, je suis pas sur de pouvoir continuer

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Si je devais faire ce module, je le ferais d'une façon que j'ai postée dans un de tes autres topics (même si je ne suis pas convaincu qu'elle soit forcément la plus propre, elle me semble convenable) :

    1. Je génère le module avec l'admin-generator. Et j'ajoute l'action "SaveObject" dans ma liste d'object_actions.

    2. Dans un fichier components.class.php, je créé l'action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public function executeUserForm$request)
    qui te permet d'afficher le formulaire d'un User comme tu le voudras ensuite dans ta liste.

    3. Tu remontes le fichier en cache : cache > front/backend > dev > modules > autoX > templates > _list_td_tabular.php
    et tu remplaces son code par un : include_component('tonComponent');

    4. Tu créés dans actions.class.php l'action executeSaveObject qui te permet de traiter l'action SaveObject.

  9. #9
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    dans ton code, tu met à jour personne par personne non ?

    si c'est le cas, je ne peut pas le proposer aux utilisateurs, pour eux ce serait une régression par rapport à ce qu'ils ont actuellement.

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Côté code, cela ressemblerait à quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # generator.yml
          list:
            title:        "Liste ..."
            display:
             - ...
            object_actions:
              save_object:        { label: "Sauvegarder" }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // components.class.php
    class userComponent extends sfComponents
    {
      public function executeUserForm($request)
      {
        $id = $this->getRoute()->getObject();
        $this->form = $this->configuration->getForm($this->simple_form);
      }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <!-- _userForm.php -->
    <td class="sf_admin_...">
      <?php echo $form->getName()-> ... // afficher la valeur ?>
    </td>
    <td class="sf_admin_...">
      <?php echo $form->getFieldEditable()-> ... // afficher le widget ?>
    </td>
    EDIT

    Ah, oui, c'est personne par personne dans l'exemple que je te donne ...
    Dans ce cas-là, il faudrait surement faire passer l'"object_actions" en "actions". Ceci dit, ce n'est qu'une piste (qui, je pense, résoudrais un peu plus proprement le problème), mais il aurait que je le teste moi-même sur un projet pour m'en convaincre.

Discussions similaires

  1. [DOM] mettre texte en forme via Dom
    Par grinder59 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/02/2006, 08h37
  2. transfert de parametres entre pages
    Par philou8 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/01/2006, 18h22
  3. Ouvrir une form via une ComboBox
    Par Conficius dans le forum Composants VCL
    Réponses: 3
    Dernier message: 05/11/2005, 16h11
  4. Transfert de parametres d'un html a un xsl via un xml ;
    Par bricole236 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 09/08/2005, 09h29
  5. Réponses: 4
    Dernier message: 26/08/2004, 08h01

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