Partager cette astuce

Vous aimez cette astuce ? Partagez la :

Injecter des valeurs avant validation du formulaire Symfony



Lors de la création d'un formulaire Symfony, vous savez (ou pas) que l'on peut :

- mettre des valeurs par défaut sur les champs d'un formulaire dans le formulaire en lui-même avec SetDefault().
Exemple : $this->setDefault('email', 'Your Email Here');

- injecter des valeurs dynamiquement en étendant la méthode save() du formulaire

- injecter des valeurs sur l'objet du formulaire dans l'action avant de sauvegarder le formulaire.
Exemple : $form->getObject()->setEmail('Your Email Here');


Mais si vous avez un validateur (la valeur du champ doit être unique par exemple), celui-ci ne sera pas appliqué si vous procédez de cette façon dans l'action.
Dans ce cas, vous pouvez ajouter vos valeurs dynamiques sur les paramètres de requêtes renvoyés en post/get par le formulaire. Voilà ce que cela peut donner :

if ($request->isMethod('post'))
{
  $form_param = $request->getParameter($this->form->getName());
  // inject some form values in request parameter before bind, 
  // so that values will be validated by form
  $form_param['email'] = $this->email_value;
  //
  $this->form->bind($form_param);
  if ($this->form->isValid())
  {
    $this->form->save();
  }
}

Créer un compte / Newsletter

Entrez votre pseudo et email pour créer un compte ou vous abonner à la newsletter du site.

Newsletter

Pour vous désabonner, cliquez ici ».