Formulaires et Validation dans le FrameWork Symfony 3
Quelle ligne de code permet de créer dans un contrôleur un $formBuilder à partir du service 'form.factory' et de l'entité $advert?
$formBuilder = $this->get('form.factory')->createBuilder(FormType::class, $advert)
Dans un contrôleur, quelle méthode du formulaire doit-on passer à la vue pour qu'elle puisse afficher seule le formulaire?
Un formulaire est-il obligé d'hydrater tous les attributs d'un objet?
Non
Elle permet d'ajouter les différents types de champs du formulaire correspondant aux attributs de l'objet.
Représente le nom de la classe DateType du composant Form.
Quelle est la manière la plus courte d'afficher un formulaire dans un template?
etc...
Oui
Si on supprime la ligne add('save', SubmitType::class)
on definira alors le boutton submit à la main dans le template
<input type=''submit'' value=''save''>
Quels sont les 3 arguments possibles pour la méthode add() du form Builder?
Est-il important de faire correspondre le type de champ du formulaire avec le type de l'attribut de l'objet?
Oui, c'est valable pour tous nos attributs.
Içi le type de champ du formulaire CheckboxType::class renvoit un boolean. Ce qui correspond au type de l'attribut 'published' de l'objet qui est un boolean.
Quelles sont les étapes classiques pour gérer la soumission d'un formulaire dans un contrôleur?
Dans un contrôleur, quelle méthode de l'objet formulaire $form, permet d'hydrater l'objet par le contenu des champs du formulaire rempli par le client?
$form->handleRequest($request)
Quel est le code classique pour gérer la soumission d'un formulaire dans un contrôleur?
Non
Avec Symfony tous les champs d'un formulaire doivent-ils être par défaut remplis par le client?
Oui
Comment rendre un champs de formulaire facultatif?
En ajoutant 'required' => false au tableau d'options du champ
Comment faire pour qu'un formulaire se remplisse avec les valeurs par défaut de certains attributs de l'objet?
On appel l'objet qui a certains attributs remplis par défaut grâce à son constructeur (ou manuellement) et ensuite seulement on remplit le formulaire avec le contenu de l'objet
On ajoute un thème adapté au framework CSS Bootstrap 3 afin de présenter élégamment un formulaire.
Peut-on remplacer dans un template, {{ form(form) }} par:
Peut-on remplacer {{form(form) }} par:
form_rest() affiche tous les champs manquants du formulaire ainsi que le champ CSRF
>php bin/console doctrine:generate:form CoreBundle:Client
Il faudra préciser les types de champs car ils sont par défaut devinés par le composant Form à partir des annotations Doctrine écrites dans la classe Client.
Peut-on créer nos propres champs de formulaire?
Oui
Ces deux lignes sont-elles équivalentes?
Oui
Quel est l'avantage de l'imbrication de formulaires?
Cela permet dans un même formulaire de renseigner le contenu de plusieurs objets liés entre eux, sans avoir à le faire sur plusieurs formulaires différents.
Quels sont les deux types d'imbrication de formulaires?
Que passer comme argument à la méthode add() du form builder d'une entité A, pour imbriquer le formuaire de l'entité image?
->add('image', ImageType::class)
Soit l'entité A liée à l'entité image par une relation OneToMany.
Que passer comme argument à la méthode add() du form builder de l'entité A, pour imbriquer le formulaire de l'entité image plusieurs fois?
Quelle est l'utilité de la classe EntityType que l'on peut utiliser comme argument dans la méthode add() du form builder suivant?
Elle nous permet de sélectionner une ou plusieurs catégories.
Quel est l'avantage de l'héritage de formulaire?
Cela permet de construire des formulaires différents à partir d'un formulaire de base.
On limite la réécriture de code.
Quelles sont les étapes pour hériter d'un formulaire TotoType?
Que peut-on utiliser pour afficher certains champs d'un formulaire en fonction de la valeur d'un champ?
On peut utiliser l'évènement de formulaire PRE_SET_DATA qui est déclenché juste avant que les champs ne soient remplis avec les valeurs de l'objet.
Ainsi on vérifie la valeur du champs souhaité pour afficher ou non certains champs.
Quelle classe type utilise-t-on comme argument dans la méthode add() d'un form builder afin de pouvoir uploader un fichier?
->add('file', FileType::class)
Est-il vrai que l'on peut à la suite d'un événement de formulaire exécuter une closure mais aussi un service?
Vrai
Pour l'upload de fichier dans un formulaire vaut-il mieux utiliser les évènements de formulaire ou les événements Doctrine pour automatiser la gestion du fichier uploadé?
Les événements Doctrine
Quel composant de Symfony permet de valider les objets?
Le composant Validator
Que peut-on faire avec le service Validator de Symfony?
On peut valider les objets sans avoir besoin de formulaire.
Les entités sont des objets.
On peut dont aussi valider les entités hydratées par le contenu des formulaires.
Quel adage doit-on suivre lorsque que vient le moment de récupérer les données de formulaires?
''Never Trust User Input''
Ne jamais faire confiance aux données envoyées par le client.
Quelles sont les 3 étapes générales de la validation?
Peut-on imposer des règles de validation sur n'importe quel objet?
Oui
Le composant Validator de Symfony accepte différentes manières pour définir les contraintes d'une classe?
Quelles sont-elles?
Quand on parle de validation parle-t-on uniquement de la validation des données de formulaire?
Quel synonyme utilise-t-on pour parler des régles de validations?
On parle également des contraintes de validation
Quel est le FQCN (Fully Qualified Class Name) et l'alias que l'on doit utiliser dans une classe pour que l'on puisse y ajouter nos contraintes de validation.
use Symfony\Component\Validator\Constraints as Assert;
Quelles sont les deux manières de définir les règles de validation (contraintes) d'une classe?
Dans une classe, quelle annotation DockBlock doit-on ajouter à l'attribut $date pour contraindre sa valeur à être de type ''DateTime''?
@Assert\DateTime()
Dans une classe, quelle annotation DockBlock doit-on ajouter à l'attribut $title pour contraindre sa valeur à être d'une longueur d'au moins 10 caratères?
@Assert\Length(min=10)
Dans une classe, quelle annotation DockBlock doit-on ajouter à l'attribut $content pour contraindre sa valeur à ne pas être vide?
@Assert\NotBlank()