Je cherchais a utiliser dernièrement les embedForms de Symfony et donc comme tout développeur qui se respecte (au moins un minimum ) je me suis lancé dans la recherche d’informations concernant cet aspect de symfony… Non sans mal…

Attention cet article est un « compte rendu d’experience » . Il peut donc etre totalement faux, bancal, stupide, mal fait etc :lol:

A mon grand étonnement , j’avais l’impression que cet outil , que je suppose puissant et flexible a souhait, ne soit pas beaucoup plus commenté, expliqué, montré… Pour faire un form « classique » , la on trouve tout ce qu’il faut,  mais dès qu’on rentre dans le spécifique , la documentation se fait maigre… Il va donc falloir se débrouiller un peu tout seul…

La création du form… pas compliqué

En effet , un petit truc tout bete pour créer le formulaire comme on l’entend , je dirais même que ca va tout seul…

//simplifiedApproachProofForm.class.php
class simplifiedApproachForm extends sfForm
{
  public function configure()
  {
    parent::configure();

    $this->embedForm ('Demandeur', new simplifiedUserForm());
    $this->embedform ('Teleprocedure', new simplifiedTeleprocedureForm());
    $this->embedform ('Commentaires', new SimplifiedApproachCommentForm());

    $this->widgetSchema->setFormFormatterName('div');
    $this->widgetSchema->setNameFormat('simplidfiedApproach[%s]');
  }

Top la création de formulaires embarqués ! :D

//action.class.php
public function executeSimplifiedIndex(sfWebRequest $request){

 //le formulaire
 $this->form = new simplifiedApproachForm();

 //le traitement du formulaire //--> experimental
 if ($request->isMethod('post')){
   $this->form->bind($request->getParameter('simplidfiedApproach')); 

   if($this->form->isValid()){
     $this->form->save();
   }
  }
}//end method

A noter quand même pour ceux qui débutent, le « form->bind » , permet de recuperer la totalité des champs en une seule commande. En PHP classique on aurait recupéré toutes les valeurs du POST une a une…

Compliquons un peu

L’idée est de mettre en place une autocompletion sur le champ Nom. Ce champ permettra de saisir le nom d’une personne et de selectionner dans une liste qui apparait la bonne personne… Facile… l’ami sfWidgetFormJQueryAutocompleter est la , dans le plugin sfFormExtraPlugin. Magnifique , une autocompletion aussi facile on en a tous revé , il y’a encore quelques années…

$this->widgetSchema['id'] = new sfWidgetFormJQueryAutocompleter(
  array('url' => 'common/getUsers' , 'value_callback' => array('User','UserSearch'))
);

Par contre, le point compliqué , c’est que maintenant je souhaiterais pouvoir mettre en place , une fonction javascript , qui permettrait de remplir automatiquement le formulaire en fonction du choix de la personne. Malheureusement je ne vois pas comment je peux integrer cet automatisme proprement dans symfony :( , a creuser…

La sauvegarde du (des) forms… plus compliqué…

C’est maintenant que les choses commencent… Evidemment toute la partie dans le code  précédent a partir du if ($request->isMethod(‘post’)) tout est expérimental…

En clair, tout la partie qui travaille avec le POST, fonctionne parfaitement pour un formulaire lambda… Par conter dès qu’on a des embed, c’est la ou la doc manque et ou je ne peux plus avancer…

Plusieurs questions fusent dans ma petite tête de noob

  • Faut il traiter  chaque formulaire a part ?
  • Quelle méthodes sont appelées pour sérialiser ces objets en base ?
  • Du coup lesquelles dois-je surcharger ?

J’ai bien trouvé quelques explications sur Amicalement Web, dans un article très bien fait,  mais je n’ai pas encore tout a fait fini de creuser..

Voila , cet article sera encore amené a évoluer au fur et a mesure des mes avancées… Si toi cher lecteur , tu es capable de m’aider , me corriger , m’expliquer , je tiens a te dire que tes commentaires sont les bienvenus !