Crée les éléments suivants en donnant un Model.field
particulier:
div enveloppante (wrapping div).
label de l’élément (Label element)
input de(s) l’élément(s) (Input element(s))
Erreur de l’élément avec un message si c’est applicable.
Le type d’input créé dépends de la colonne datatype:
- Column Type
Champ de formulaire résultant
- string (char, varchar, etc.)
text
- boolean, tinyint(1)
checkbox
- text
textarea
- text, avec le nom de password, passwd, ou psword
password
- text, avec le nom de email
email
- text, avec le nom de tel, telephone, ou phone
tel
- date
day, month, et year selects
- datetime, timestamp
day, month, year, hour, minute, et meridian selects
- time
hour, minute, et meridian selects
- binary
file
Le paramètre $options
vous permet de personnaliser le
fonctionnement de input()
, et contrôle finement ce qui est généré.
Le div entourant aura un nom de classe required
ajouté à la suite si
les règles de validation pour le champ du Model ne spécifient pas
allowEmpty => true
. Une limitation de ce comportement est que le champ
du model doit avoir été chargé pendant la requête. Ou être directement
associé au model fourni par create()
.
Nouveau dans la version 2.5: Le type binaire mappe maintenant vers un input de fichier.
Nouveau dans la version 2.3.
Depuis 2.3, l’attribut HTML5 required
va aussi être ajouté selon les
règles de validation du champ. Vous pouvez explicitement définir
la clé required
dans le tableau d’options pour la surcharger pour un
champ. Pour échapper la validation attrapée par le navigateur pour
l’ensemble du formulaire, vous pouvez définir l’option
'formnovalidate' => true
pour l’input button que vous générez en
utilisant FormHelper::submit()
ou définir
'novalidate' => true
dans les options pour
FormHelper::create()
.
Par exemple, supposons que votre model User contient les champs
username (varchar), password (varchar), approved (datetime) et quote (text).
Vous pouvez utiliser la méthode input() de l’Helper Formulaire (Formhelper)
pour créer une entrée appropriée pour tous les champs du formulaire.
echo $this->Form->create();
echo $this->Form->input('username'); //text
echo $this->Form->input('password'); //password
echo $this->Form->input('approved'); //day, month, year, hour, minute,
//meridian
echo $this->Form->input('quote'); //textarea
echo $this->Form->end('Add');
Un exemple plus complet montrant quelques options pour le champ de date:
echo $this->Form->input('birth_dt', array(
'label' => 'Date de naissance',
'dateFormat' => 'DMY',
'minYear' => date('Y') - 70,
'maxYear' => date('Y') - 18,
));
Outre les options spécifique pour input()
vu ci-dessus, vous pouvez
spécifier n’importe quelle options pour le type d’input et n’importe quel
attribut HTML (actuellement dans le focus).
Pour plus d’information sur les $options
et $htmlAttributes
voir
HTMLHelper.
Supposons un User hasAndBelongsToMany Group. Dans votre controller,
définissez une variable camelCase au pluriel (groupe -> groupes dans cette
exemple, ou ExtraFunkyModele -> extraFunkyModeles) avec les options de
sélections. Dans l’action du controller vous pouvez définir:
$this->set('groups', $this->User->Group->find('list'));
Et dans la vue une sélection multiple peut être crée avec ce simple code:
echo $this->Form->input('Group', array('multiple' => true));
Si vous voulez un champ de sélection utilisant une relation belongsTo
ou hasOne, vous pouvez ajouter ceci dans votre controller Users
(en supposant que l’User belongsTo Group):
$this->set('groups', $this->User->Group->find('list'));
Ensuite, ajouter les lignes suivantes à votre vue de formulaire:
echo $this->Form->input('group_id');
Si votre nom de model est composé de deux mots ou plus,
ex. « UserGroup », quand vous passez les données en utilisant set()
vous devrez nommer vos données dans un format CamelCase
(les Majuscules séparent les mots) et au pluriel comme ceci:
$this->set('userGroups', $this->UserGroup->find('list'));
// ou bien
$this->set(
'reallyInappropriateModelNames',
$this->ReallyInappropriateModelName->find('list')
);
Note
Essayez d’éviter l’utilisation de FormHelper::input() pour générer
les boutons submit. Utilisez plutôt FormHelper::submit()
.