Programmation PHP avec Symfony/Formulaire

Principe.
Le principe est d'ajouter des champs de formulaire en PHP, qui seront automatiquement convertis en code HTML correspondant.
En effet, en HTML on utilise habituellement la balise codice_1 pour afficher les champs à remplir par le visiteur. Puis sur validation on récupère leurs valeurs en PHP avec la superglobale codice_2 (ou ses composantes codice_3 et codice_4). Or ce système ne fonctionne pas en codice_4 dans Symfony : si on affiche un tel formulaire et qu'on le valide, codice_4 est vide, et l'équivalent Symfony de codice_2, codice_8 aussi.
Les formulaires doivent donc nécessairement être préparés en PHP.
Installation.
Form.
Les formulaires présents sont ensuite listables avec :
Et vérifiables individuellement :
Avec le composant "maker", on peut créer un formulaire pour chaque entité Doctrine à modifier :
Validator.
Pour ajouter des contrôles sur les champs, il existe un deuxième composant Symfony :
Contrôleur.
Injection du formulaire dans un Twig.
class HelloWorldType extends AbstractType
 public function buildForm(FormBuilderInterface $builder, array $options): void
 $builder
 ->add('name', TextType::class)
 ->add('save', SubmitType::class)
class HelloWorldController extends AbstractController
 #[Route('/helloWorld/{id}, requirements: ['id' => '\d*']')]
 public function indexAction(Request $request, ?HelloWorld $helloWorld = null): Response
 $form = $this->createForm(HelloWorldType::class, $helloWorld);
 return $this->render('helloWorld.html.twig', [
 'form' => $form->createView(),
Le second paramètre de "createForm()" est facultatif est sert à préciser des valeurs initiales dans le formulaire qui seront injectées en ../Twig/, mais elles peuvent aussi l'être via le fichier du formulaire dans les paramètres de chaque champ.
Traitement post-validation.
Dans la même méthode du contrôleur qui injecte le formulaire, il faut prévoir le traitement post-validation. Par exemple pour mettre à jour l'entité en base :
 $form->handleRequest($request);
 if ($form->isSubmitted() && $form->isValid()) {
 $email = $form->get('email')->getData();
 $this->em->persist($email);
 $this->em->flush();
 return $this->redirectToRoute('home');
Fichier du formulaire.
Dans SF4, l'espace de nom Symfony\Component\Form\Extension\Core\Type propose 35 types de champ, tels que :
TextType.
Exemple :
 public function buildForm(FormBuilderInterface $builder, array $options)
 $builder
 ->add('email', TextType::class, [
 'required' => true,
 'empty_data' => 'valeur par défaut si vide à la validation',
 'data' => 'valeur par défaut préremplie à la création',
 'constraints' => [new Assert\NotBlank()],
 'attr' => ['class' => 'ma_classe_CSS'],
Pour préremplir des valeurs dans les champs :
ChoiceType.
Il faut injecter le tableau des choix du menu déroulant dans la clé "choices", avec en clé ce qui sera visible dans la liste et en valeur ce qui sera envoyé à la soumission.
Ex :
 $builder
 ->add('civility', ChoiceType::class, [
 'choices' => ['Choisir' => null, 'M.' => 'M.', 'Mme' => 'Mme'],
Dans le cas où une valeur par défaut est définie dans 'data', elle doit appartenir aux valeurs du tableau de "choices", sans quoi elle ne sera pas prise en compte.
EntityType.
De plus, en installant ../Doctrine/, il est possible d'ajouter un type de champ "entité" directement relié avec un champ de base de données.
Ex :
Exemple : 
Validation.
Validation depuis les entités.
Le validateur de formulaire d'entité peut utiliser les annotations des entités. Ex : 
use Symfony\Component\Validator\Constraints as Assert;
 min: 1,
 max: 255,
En PHP < 8 :
use Symfony\Component\Validator\Constraints as Assert;
 /**
 * @Assert\Type("string")
 * @Assert\NotBlank
 * @Assert\Length(
 * min = 2,
 * max = 50
 */
Plusieurs types de données sont déjà définis, comme l'email ou l'URL. Ex :
@Assert\Email()
Validation depuis les formulaires.
Sinon il permet aussi des contrôles plus personnalisés dans les types (qui étendent Symfony\Component\Form\AbstractType). Ex :
'constraints' => [
 new Assert\NotBlank(),
 new GreaterThanOrEqual(2),
 new Assert\Callback([ProductChecker::class, 'check']),
Validation avec un service.
Pour valider une entité depuis le service validateur :
 use Symfony\Component\Validator\Validator\ValidatorInterface;
 $validator->validate(
 $entity,
 $entityConstraint
NB : le second paramètre est optionnel.
Exemple pour valider un email :
use Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Validator\Validator\ValidatorInterface;
 $this->validator->validate(
 'mon_email@example.com',
 new Email()
Appel du formulaire Symfony dans la vue.
Les fonctions Twig permettant d'ajouter les éléments du formulaire sont :
Pour afficher tout le formulaire, dans l'ordre où les champs ont été définis en PHP :

Pour n'afficher qu'un seul champ :
Les mêmes attributs qu'en PHP peuvent être définis en paramètre. Ex :
Exemple complet :

Photographie/Sociétés et Organisations/Éditeurs de cartes postales/Delage

Delage était un éditeur de cartes postales installé à Froidmont, Bailleul-sur-Thérain (Oise).

Photographie/Sociétés et Organisations/Éditeurs de cartes postales/Bazar du livre

Bazar du livre était un éditeur belge produisant, entre autres, des cartes postales photographiques.

Eugène Trutat
Photographie/Personnalités/T/Emil Tesch
Biographie.
Emil Tesch (1860 - 1931) était un photographe allemand.

Les bases de données/Les gestionnaires de bases de données

Un gestionnaire de bases de données (SGBD : Système de Gestion de Bases de Données) fournit l'ensemble des outils permettant de gérer une base de données.
Il existe différents logiciels gestionnaire de bases de données ayant des différences :
Principaux SGBD.
Ce chapitre ne détaille pas les spécificités des principaux SGBD car il existe des wikilivres détaillés.

Photographie/Personnalités/M/Rob Mieremet

Biographie.
Rob Mieremet (1947 – 2015) était un photographe néerlandais.

Enseignement de l'anglais/Franglais
Photographie/Personnalités/M/Johannes Maass

Biographie.
Johannes Maass était un photographe allemand né et mort à Lübeck (1863 - 29 novembre 1930).

Photographie/Personnalités/N/Hermann Christian Neupert

Biographie.
Hermann Christian Neupert était un photographe norvégien né le 28 juin 1875 à New York et décédé le 6 janvier 1941. Il a travaillé à Oslo et à Drøbak.

Photographie/Personnalités/K/Ronald Kroon

Biographie.
Ronald ("Ron") Kroon était un nageur néerlandais qui gagna deux médailles de bronze lors des championnats d'Europe de 1962. Il concourut également aux Jeux Olympiques de 1960 et 1964, terminant à la 8e place du relais 4 fois 100 m 4 nages. De 1960 à 1964 il fut 4 fois champion des pays-Bas et battit 12 fois le record national du 100 m nage libre, devenant le premier Néerlandais à nager le 100 m en moins de 55 s.
Après sa carrière de nageur, Kroon devint photographe pour l'agence ANEFO (1965 - 1968) et journaliste (AVRO).

Photographie/Sociétés et Organisations/Agences photographiques/ANEFO