Travailler avec les formulaires ================== Cette section décrit la création d'une nouvelle page comprenant un formulaire pour recevoir des données des utilisateurs. La page affichera un formulaire composé d'un champ de saisie nom et un champ de saisie email. Une fois ces deux informations reçues de l'utilisateur, la page affichera les valeurs entrées pour confirmation. Pour atteindre ce but, vous créerez non seulement une [action](structure-controllers.md) et deux [vues](structure-views.md), mais aussi un [modèle](structure-models.md). Au long de ce tutoriel, vous apprendrez à : * Créer un [modèle](structure-models.md) pour représenter les données saisies par un utilisateur à travers un formulaire * Déclarer des règles pour valider les données entrées * Construire un formulaire HTML dans une [vue](structure-views.md) Créer un Modèle ---------------- Les données demandées à l'utilisateur seront représentées par une classe de modèle `EntryForm` comme montrée ci-dessous enregistrée dans le fichier `models/EntryForm.php`. Merci de vous référer à la section [Auto-chargement de Classes](concept-autoloading.md) pour plus de détails sur la convention de nommage de fichiers classes. ```php Info: [[yii\base\Model]] est utilisée en tant que parent pour des classes modèles qui ne sont *pas* associées à des tables de base de données. [[yii\db\ActiveRecord]] est normalement le parent pour les classes modèles qui correspondent à des tables de bases de données. La classe `EntryForm` contient deux membres publics, `nom` et `email`, qui sont utilisés pour stocker les données saisies par l'utilisateur. Elle contient également une méthode nommée `rules()`, qui renvoie un assortiment de règles pour valider les données. Les règles de validation déclarées ci-dessus énoncent que * à la fois les valeurs de `nom` et `email` sont requises * la donnée `email` doit être une adresse email syntaxiquement valide Si vous avez un objet `EntryForm` peuplé par les données saisies par un utilisateur, vous pouvez appeler sa méthode [[yii\base\Model::validate()|validate()]] pour déclencher les routines de validation de données. Un échec de validation de données affectera la valeur true à la propriété [[yii\base\Model::hasErrors|hasErrors]], et vous pourrez connaître quelles erreurs de validations sont apparues via [[yii\base\Model::getErrors|errors]]. ```php nom = 'Qiang'; $model->email = 'mauvais'; if ($model->validate()) { // Bien! } else { // Echec! // Use $model->getErrors() } ``` Créer une Action ------------------ Maintenant, vous allez créer une action `entry` dans le contrôleur `site` qui utilisera le nouveau modèle. Le processus de création et d'utilisation d'actions a été expliqué dans la section [Hello World](start-hello.md). ```php load(Yii::$app->request->post()) && $model->validate()) { // données valides reçues dans $model // faire quelque chose de significatif ici avec $model ... return $this->render('entry-confirm', ['model' => $model]); } else { // soit la page est affichée au début soit il y a des erreurs de validation return $this->render('entry', ['model' => $model]); } } } ``` L'action commence par créer un objet `EntryForm`. Puis, elle tente de peupler le modèle avec les données de `$_POST`, fournies dans yii par [[yii\web\Request::post()]]. Si le modèle est peuplé avec succès (c'est à dire, si l'utilisateur a soumis le formulaire HTML), l'action appellera [[yii\base\Model::validate()|validate()]] pour s'assurer de la validité de toutes les valeurs. > Info: L'expression `Yii::$app` représente l'instance d'[application](structure-applications.md), qui est un singleton accessible de manière globale. C'est aussi un [annuaire de services](concept-service-locator.md) qui fournit des composants tels que `request`, `response`, `db`, etc. pour assister des fonctionnalités spécifiques. Dans le code ci-dessus, le composant `request` de l'instance d'application est utilisé pour accéder aux données `$_POST`. Si tout se passe bien, l'action effectuera le rendu d'une vue nommée `entry-confirm` pour confirmer le succès de la soumission à l'utilisateur. Si aucune donnée n'est soumise ou si les données contiennent des erreurs, la vue `entry` sera générée, dans laquelle le formulaire HTML sera affiché, ainsi que tout message d'erreur de validation. > Note: Dans cet exemple très simple, nous effectuons le rendu de la page de confirmation après soumission de données valides. En pratique, vous devriez envisager d'utiliser [[yii\web\Controller::refresh()|refresh()]] ou [[yii\web\Controller::redirect()|redirect()]] pour éviter les [problèmes de multiple soumission de formulaire](http://fr.wikipedia.org/wiki/Post-Redirect-Get). Créer des Vues -------------- Enfin, créez deux fichiers de vue nommés `entry-confirm` et `entry`. Ceux-ci seront rendus par l'action `entry`, comme décrit précédemment. La vue `entry-confirm` affiche simplement les données de nom et email. Elle doit être placée dans le fichier `views/site/entry-confirm.php`. ```php
Vous avez entré les informations suivantes :