Le Helper Form est un nouvel ajout à CakePHP. La plupart du gros oeuvre,
dans la création de formulaire s’effectue maintenant en utilisant cette
nouvelle classe, plutôt que par les méthodes (maintenant obsolètes) du
Helper HTML. Le Helper Form se concentre sur la création rapide de
formulaires, d’une manière qui permet de rationaliser la validation, le
repeuplement et la mise en page. Le Helper Form est également flexible :
il fera presque tout à votre place, « automagiquement », sinon vous pouvez
utiliser ses méthodes spécifiques, pour réaliser seulement ce dont vous
avez besoin.
Créer des formulaires
La première méthode dont vous aurez besoin d’utiliser pour prendre
pleinement avantage du FormHelper est create()
. Cette méthode
affichera un tag d’ouverture de formulaire.
create(string $model = null, array $options = array())
Tous les paramètres sont optionnels. Si create()
est appelée sans
paramètres, CakePHP supposera que vous voulez créer un formulaire en
rapport avec le contrôleur courant, avec selon les cas l’action
add()
ou l’action edit()
. La méthode par défaut pour les
formulaires est POST. L’élément du formulaire est également renvoyée
avec un DOM ID. Cet identifiant est créé à partir du nom du modèle, et
du nom du contrôleur. Si j’apelle create()
dans une vue de
MembresController, j’obtiendrai ce genre de rendu dans ma vue :
<form id="MembreAddForm" method="post" action="/membres/add">
La méthode create()
nous permet également de personnaliser plusieurs
paramètres. Premièrement, vous pouvez spécifier un nom de modèle. Ce
faisant, vous modifiez le contexte de ce formulaire. Tous les champs
seront supposés dépendre de ce modèle (sauf si spécifié), et tous les
modèles devront être liés à lui. Si vous ne spécifiez pas de modèle,
CakePHP supposera que vous utilisez le modèle par défaut pour le
contrôleur courant.
<?php echo $form->create('Recette'); ?>
// affichera :
<form id="RecetteAddForm" method="post" action="/recettes/add">
Ce formulaire enverra les données à votre action add()
de
RecettesController. Cependant, vous pouvez utiliser la même logique
pour créer et modifier des formulaires. Le helper FormHelper utiliser
la propriété $this->data
pour détecter automatiquement s’il faut
créer un formulaire d’ajout ou de modification. Si $this->data
contient un élément tabulaire après le nom du modèle, et que ce tableau
contient une valeur non nulle pour la clé primaire du modèle, alors le
FormHelper créera un formulaire de modification pour cet
enregistrement précis. Par exemple, si on va à l’adresse
https://site.com/recettes/edit/5, nous devrions obtenir ceci :
// controllers/recettes_controller.php:
<?php
function edit($id = null) {
if (empty($this->data)) {
$this->data = $this->Recette->findById($id);
} else {
// Le code de sauvegarde vient ici
}
}
?>
// views/recettes/edit.ctp:
// Comme $this->data['Recipe']['id'] = 5, on doit obtenir un formulaire de modification
<?php echo $form->create('Recipe'); ?>
//affichera :
<form id="RecetteEditForm" method="post" action="/recettes/edit/5">
<input type="hidden" name="_method" value="PUT" />
Comme c’est un formulaire de modification, un champ caché (hidden) est
créé pour surcharger la méthode HTTP par défaut
Le tableau $options
est l’endroit où la plupart des paramètres de
configurations est stockée. Ce tableau peut contenir un certain nombre
de paires clé-valeur qui peuvent affecter la manière dont le formulaire
sera créé.
$options[“type”]
Cette clé est utilisée pour spécifier le type de formulaire à créer. Les
valeurs que peuvent prendre cette variable sont “post”, “get”, “file”,
“put” et “delete”.
Choisir “post” ou “get” changera la méthode de soumission du formulaire
en fonction de votre choix.
<?php echo $form->create('Membre', array('type' => 'get')); ?>
//Affichera :
<form id="MembreAddForm" method="get" action="/membres/add">
Choisir “file” changera la méthode de soumission à “post”, et ajoutera
la mention « multipart/form-data » dans le tag du formulaire. Vous devez
l’utiliser si vous avez des demandes de fichiers dans votre formulaire.
L’absence de cet attribut d’enctype empêchera l’envoi de fichiers à
partir de ce formulaire.
<?php echo $form->create('Membre', array('type' => 'file')); ?>
//Affichera :
<form id="MembreAddForm" enctype="multipart/form-data" method="post" action="/membres/add">
Quand vous utilisez “put” ou “delete”, votre formulaire sera équivalent
à un formulaire de type “post”, mais quand il sera envoyé, la méthode de
requête HTTP sera respectivement surchargée avec “PUT” ou “DELETE”. Ca
permettra à CakePHP de créer son propre support REST dans les
navigateurs web.
$options[“action”]
La variable action vous permet de définir à quelle action dans votre
contrôleur pointera le formulaire. Par exemple, si vous voulez que le
formulaire appelle l’action login() de votre contrôleur courant, vous
créeriez le tableau $options comme ceci :
<?php echo $form->create('Membre', array('action' => 'login')); ?>
//Affichera :
<form id="MembreLoginForm" method="post" action="/membres/login">
</form>
$options[“url”]
Si l’action que vous désirez appeler avec le formulaire n’est pas dans
le contrôleur courant, vous pouvez spécifier une URL précise dans le
formulaire en utilisant la clé “url” de votre tableau $options. L’URL
ainsi donnée peut être relative à votre application CakePHP ou peut
pointer vers un domaine extérieur.
<?php echo $form->create(null, array('url' => '/recettes/ajouter')); ?>
// ou
<?php echo $form->create(null, array('url' => array('controller' => 'recettes', 'action' => 'ajouter'))); ?>
// Affichera :
<form method="post" action="/recettes/ajouter">
<?php echo $form->create(null, array(
'url' => 'https://www.google.com/search',
'type' => 'get'
)); ?>
// Affichera :
<form method="get" action="https://www.google.com/search">
Regardez aussi la méthode HtmlHelper::url pour
plus d’exemples sur les différent types d’urls.
$options[“default”]
Si la variable “default” (NdT : attention, il y a bien un L
contrairement au mot français !) a été affectée du booléen false,
l’action de soumission du formulaire a été changée de telle manière que
le bouton de soumission ne valide plus le formulaire. Si le formulaire a
été créé pour être validé par AJAX, mettre la variable “default” à FALSE
supprime le comportement par défaut du formulaire, ainsi vous pouvez
collecter les données et les soumettre par AJAX à la place.
Éléments de formulaire automagiques
Tout d’abord, intéressons-nous à quelques-unes des méthodes de création
automatique de formulaire de l’assistant Form. La principale méthode que
nous allons étudier est input(). Cette méthode inspecte automatiquement
le champ du modèle qui lui est fourni afin de créer une entrée
appropriée pour ce champ.
input(string $fieldName, array $options = array())
Type de colonne |
Champ de formulaire résultant |
string (char, varchar, etc.) |
text |
boolean, tinyint(1) |
checkbox |
text |
textarea |
text, avec password, passwd ou psword comme nom |
password |
date |
selects jours, mois et années |
datetime, timestamp |
selects jours, mois, années, heures, minutes et méridien |
time |
selects heures, minutes et méridien |
Par exemple, supposons que mon modèle Utilisateur contient les champs
nom_utilisateur (varchar), password (varchar), accepte (datetime) et
citation (text). Je peux utiliser la méthode input() de l’assistant
Forms pour créer une entrée appropriée pour tous ces champs du
formulaire.
<?php echo $form->create(); ?>
<?php
echo $form->input('nom_utilisateur'); //text
echo $form->input('password'); //password
echo $form->input('accepte'); //day, month, year, hour, minute, meridian
echo $form->input('citation'); //textarea
?>
<?php echo $form->end('Ajouter'); ?>
Un exemple plus complet montrant quelques options pour un champ de date
:
echo $form->input('date_naissance', array( 'label' => 'Date de naissance'
, 'dateFormat' => 'DMY'
, 'minYear' => date('Y') - 70
, 'maxYear' => date('Y') - 18 ));
En plus des options d’entrée spécifiques trouvées ci-dessous, vous
pouvez spécifiez n’importe quel attribut html (par exemple onfocus).
Pour plus d’information sur $options et $htmlAttributes voir HTML
Helper.
Et pour finir, voici un exemple pour la création d’une sélection
hasAndBelongsToMany. Supposons que Utilisateur hasAndBelongsToMany
Groupe. Dans votre contrôleur, définissez une variable camelCased au
pluriel (groupe -> groupes dans cette exemple ou ExtraFunkyModele ->
extraFunkyModeles) avec les options de sélection. Dans le contrôleur
vous pouvez définir :
$this->set('groupes', $this->Utilisateur->Groupe->find('list'));
Et dans la vue une sélection multiple sera créée avec cette simple ligne
de code :
echo $form->input('Groupe');
Si vous voulez créer un champ de sélection utilisant une relation
belongsTo ou hasOne, vous pouvez ajouter ceci dans votre contrôleur
Utilisateurs (supposant que Utilisateur belongsTo Groupe) :
$this->set('groupes', $this->Utilisateur->Groupe->find('list'));
Ensuite, ajoutez ceci à la vue du formulaire :
echo $form->input('groupe_id');
Si le nom de votre modèle consiste en deux mots ou plus, par ex
« GroupeUtilisateur », quand vous passez les données en utilisant set(),
vous devriez nommer vos données dans un format pluralisé et camelCased,
comme ceci :
$this->set('groupeUtilisateurs', $this->GroupeUtilisateur->find('list'));
// ou
$this->set('nomDeModeleVraimentInappropries', $this->NomDeModeleVraimentInapproprie->find('list'));
Convention de nommage des champs
Le Helper Form est assez évolué. Lorsque vous définissez un nom de champ
avec les méthodes du Helper Form, celui-ci génère automatiquement une
balise input basée sur le nom de modèle courant, selon le format suivant
:
<input type="text" id="NommodeleNomchamp" name="data[Nommodele][nomchamp]">
Vous pouvez également préciser le nom du modèle manuellement, en passant
un premier paramètre de la forme Nommodele.nomchamp.
echo $form->input('Nommodele.nomchamp');
Si vous avez besoin de définir plusieurs champs ayant le même nom, donc
de créer un tableau qui peut être enregistré en une seule fois avec
saveAll()
, utilisez la convention suivante :
<?php
echo $form->input('Nommodele.0.nomchamp');
echo $form->input('Nommodele.1.nomchamp');
?>
<input type="text" id="Nommodele0Nomchamp" name="data[Nommodele][0][nomchamp]">
<input type="text" id="Nommodele1Nomchamp" name="data[Nommodele][1][nomchamp]">
$options[‘type’]
Vous pouvez forcer le type d’un input (et donc remplacer la logique
d’analyse du modèle) en définissant un type. En plus des types de champs
décrits dans le tableau ci-dessus, vous pouvez également créer des
inputs “file” et “password”.
<?php echo $form->input('champ', array('type' => 'file')); ?>
Affiche :
<div class="input">
<label for="UtilisateurChamp">Champ</label>
<input type="file" name="data[Utilisateur][champ]" value="" id="UtilisateurChamp" />
</div>
$options[‘before’], $options[‘between’], $options[‘separator’] and $options[‘after’]
Utilisez ces clés si vous avez besoin d’injecter quelques balises à la
sortie de la méthode input().
<?php echo $form->input('field', array(
'before' => '--avant--',
'after' => '--après--',
'between' => '--au milieu---'
));?>
Output:
<div class="input">
--avant--
<label for="UserField">Champ</label>
--au milieu---
<input name="data[User][field]" type="text" value="" id="UserField" />
--après--
</div>
Pour un input de type radio l’attribut “separator” peut être utilisé
pour injecter des balise pour séparer input/label.
<?php echo $form->input('field', array(
'before' => '--avant--',
'after' => '--après--',
'between' => '--au milieu--',
'separator' => '--séparateur--',
'options' => array('1', '2')
));?>
Output:
<div class="input">
--avant--
<input name="data[User][field]" type="radio" value="1" id="UserField1" />
<label for="UserField1">1</label>
--séparateur--
<input name="data[User][field]" type="radio" value="2" id="UserField2" />
<label for="UserField2">2</label>
--au milieu---
--après--
</div>
Pour un élément de type date
et datetime
l’attribut
“separator” peut être utilisé pour modifier la chaine entre les
select. Par défaut “-“.
$options[‘options’]
Cette clé vous permet de spécifier manuellement les options pour un
select ou pour un groupe de boutons radio. A moins que “type” ne soit
spécifié comme “radio”, l’Assistant Form assumera que la cible rendu est
un champ select.
<?php echo $form->input('champ', array('options' => array(1,2,3,4,5))); ?>
Affiche :
<div class="input">
<label for="ChampUtilisateur">Champ</label>
<select name="data[Utilisateur][champ]" id="ChampUtilisateur">
<option value="0">1</option>
<option value="1">2</option>
<option value="2">3</option>
<option value="3">4</option>
<option value="4">5</option>
</select>
</div>
Options peut aussi être passé comme des paires clés/valeurs.
<?php echo $form->input('champ', array('options' => array(
'Valeur 1'=>'Label 1',
'Valeur 2'=>'Label 2',
'Valeur 3'=>'Label 3'
))); ?>
Affiche :
<div class="input">
<label for="ChampUtilisateur">Champ</label>
<select name="data[Utilisateur][champ]" id="ChampUtilisateur">
<option value="Value 1">Label 1</option>
<option value="Value 2">Label 2</option>
<option value="Value 3">Label 3</option>
</select>
</div>
Si vous aimeriez générer un select avec des optgroups, passez simplement
les données dans un format hiérarchique. Fontionne aussi sur les cases à
cocher multiple et les boutons radio, mais à la place des optgroups,
entoure les éléments par des fieldsets.
<?php echo $form->input('champ', array('options' => array(
'Label1' => array(
'Valeur 1'=>'Label 1',
'Valeur 2'=>'Label 2'
),
'Label2' => array(
'Valeur 3'=>'Label 3'
)
))); ?>
Affiche :
<div class="input">
<label for="ChampUtilisateur">Champ</label>
<select name="data[Utilisateur][champ]" id="ChampUtilisateur">
<optgroup label="Label1">
<option value="Value 1">Label 1</option>
<option value="Value 2">Label 2</option>
</optgroup>
<optgroup label="Label2">
<option value="Value 3">Label 3</option>
</optgroup>
</select>
</div>
$options[‘multiple’]
Si ‘multiple’ a été définit à vrai pour un champ qui génère un select,
le select autorisera les sélections multiples. Il est également possible
de définir la valeur de l’option ‘multiple’ à ‘checkbox’ pour générer
une liste de case à cocher.
$form->input('Model.field', array( 'type' => 'select', 'multiple' => true ));
$form->input('Model.field', array( 'type' => 'select', 'multiple' => 'checkbox' ));
$options[‘maxLength’]
Cette option permet de définir le nombre maximum de caractères autorisés
dans un champ de texte.
$options[‘div’]
utiliser cette option pour mettre a jour les attributs contenus dans la
balise div. L’introduction d’une chaine de caractère mettra a jour
l’attribut class . L’introduction d’un tableau mettra a jour les
attributs correspondants au champs clé/valeur du tableau .
Alternativement ,
vous pouvez mettre cette option a faux pour pour annuler l’affichage du
div .
Modification du nom de la class :
echo $form->input('User.name', array('div' => 'class_name'));
Code produit :
<div class="class_name">
<label for="UserName">Name</label>
<input name="data[User][name]" type="text" value="" id="UserName" />
</div>
Modification de plusieurs attributs :
echo $form->input('User.name', array('div' => array('id' => 'mainDiv', 'title' => 'Div Title', 'style' => 'display:block')));
Code produit :
<div class="input text" id="mainDiv" title="Div Title" style="display:block">
<label for="UserName">Name</label>
<input name="data[User][name]" type="text" value="" id="UserName" />
</div>
Annulation de l’affichage du div :
<?php echo $form->input('User.name', array('div' => false));?>
Code produit :
<label for="UserName">Name</label>
<input name="data[User][name]" type="text" value="" id="UserName" />
$options[‘label’]
Mettez a jour cette option pour modifier la chaine de caractere qui va
etre affichée dans le libellé qui va accompagner le input
<?php echo $form->input( 'User.name', array( 'label' => 'The User Alias' ) );?>
Code produit :
<div class="input">
<label for="UserName">The User Alias</label>
<input name="data[User][name]" type="text" value="" id="UserName" />
</div>
Alternativement , mettez cette option a faux pour annuler l’affichage du
libellé .
<?php echo $form->input( 'User.name', array( 'label' => false ) ); ?>
Code produit :
<div class="input">
<input name="data[User][name]" type="text" value="" id="UserName" />
</div>
mettez cette option sous forme de tableau pour apporter des options
supplémentaires a l’élément label
. Si vous faites cela , vous
pourrai utiliser la clé text
dans le tableau pour modifier le texte
du libellé .
<?php echo $form->input( 'User.name', array( 'label' => array('class' => 'thingy', 'text' => 'The User Alias') ) ); ?>
Code produit :
<div class="input">
<label for="UserName" class="thingy">The User Alias</label>
<input name="data[User][name]" type="text" value="" id="UserName" />
</div>
$options[“legend”]
Certains inputs comme les boutons radio seront automatiquement entourés
par un fieldset, avec un titre pour la légende dérivé du nom du champ.
Ce titre peut être remplacé avec cette option. Définir cette option à
false éliminera complètement le fieldset.
$options[‘id’]
Définissez cette clé pour forcer la valeur de l’id DOM de l”input.
$options[“error”]
Utiliser cette clé vous permet de surcharger les messages d’erreur par
défaut du modèle et elle peut être utilisée, par exemple, pour définir
des messages i18n. Elle a un certain nombre de sous-options qui
contrôlent l’élément englobant, le nom de la classe de l’élément
englobant et si le HTML dans le message d’erreur sera échappé ou non.
Pour désactiver l’affichage du message d’erreur, définissez la clé error
à false.
$form->input('Model.champ', array('error' => false));
Pour modifier le type de l’élément et sa classe, utilisez le format
suivant :
$form->input('Model.champ', array('error' => array('wrap' => 'span', 'class' => 'bzzz')));
Pour éviter que le HTML soit automatiquement échappé à l’affichage du
message d’erreur, définissez la sous-option escape à false :
$form->input('Model.champ', array('error' => array('escape' => false)));
Pour surcharger les messages d’erreur du modèle, utilisez un tableau
associatif avec le nom de la règle de validation :
$form->input('Model.champ', array('error' => array('tropCourt' => __('Ceci n\'est pas assez long', true) )));
Comme vu ci-dessus, vous pouvez définir le message d’erreur pour chaque
règle de validation que vous avez dans vos modèles. En plus, vous pouvez
fournir des messages i18n pour vos formulaires.
$options[“default”]
Utilisé pour définir une valeur par défaut pour le champ input. La
valeur est utiliisée si les données transmises au formulaire ne
contiennent pas de valeur pour le champ (ou si aucune donnée n’est
passée du tout).
Exemple d’utilisation :
<?php
echo $form->input('ingredient', array('default'=>'Sucre'));
?>
Exemple avec un champ select (la taille « Medium » sera sélectionnée par
défaut) :
<?php
$tailles = array('s'=>'Small', 'm'=>'Medium', 'l'=>'Large');
echo $form->input('taille', array('options'=>$tailles, 'default'=>'m'));
?>
Vous ne pouvez pas utiliser default
pour cocher une checkbox - à la
place vous devez définir cette valeur dans le $this->data
de votre
contrôleur, dans le $form->data
de votre vue ou définir l’option
checked
à true.
Les valeurs par défaut des champs date et datetime peuvent être définies
en utilisant la clé “selected”.
$options[‘selected’]
Utilisé en combinaison avec un input de type select (A savoir: pour
les types select, date, time, datetime). Défini la valeur
“selected” de l’élément que vous voulez sélectionner par défaut lors
de l’affichage de l”input.
echo $form->input('close_time', array('type' => 'time', 'selected' => '13:30:00'));
La clé sélectionnée pour un input de type date et datetime peut
être un timestamp UNIX.
$options[‘rows’], $options[‘cols’]
Ces deux clés définissent le nombre de lignes et de colonnes dans un
input de type textarea.
echo $form->input('textarea', array('rows' => '5', 'cols' => '5'));
Affichera:
<div class="input text">
<label for="FormTextarea">Textarea</label>
<textarea name="data[Form][textarea]" cols="5" rows="5" id="FormTextarea" >
</textarea>
</div>
$options[‘empty’]
Si vrai, force l”input à rester vide.
Lorsqu’il est passé à une liste de sélection, il créé une option vide
avec une valeur vide dans votre liste déroulante. Si vous voulez avoir
une valeur vide avec un texte affiché au lieu d’une option vide, passer
lui une chaine.
<?php echo $form->input('field', array('options' => array(1,2,3,4,5), 'empty' => '(choisissez un texte)')); ?>
Affichera:
<div class="input">
<label for="UserField">Field</label>
<select name="data[User][field]" id="UserField">
<option value="">(choisissez un text)</option>
<option value="0">1</option>
<option value="1">2</option>
<option value="2">3</option>
<option value="3">4</option>
<option value="4">5</option>
</select>
</div>
Si vous avez besoin de définir une valeur par défaut dans un champ
password à vide, utiliser à la place “value” => “”.
Les options peuvent être fournies sous forme de paire clés-valeurs.
$options[“minYear”], $options[“maxYear”]
Utilisé en combinaison avec un input de type date/datetime. Défini
la valeur minimal et maximal d’un champs de type select pour les
années.
$options[“interval”]
Cette option spécifie le nombre de minutes entre chaque option dans la
boîte de sélection des minutes.
<?php echo $form->input('Model.time', array('type' => 'time', 'interval' => 15)); ?>
Créera 4 options dans la boite de sélection des minutes. Une toute les
15 minutes.
$options[“class”]
Vous pouvez définir le nom de la classe CSS pour un champ input en
utilisant $options['class']
echo $form->input('titre', array('class' => 'classe-custom'));
Champs de fichiers
Pour ajouter un champ d”upload de fichier dans un formulaire, vous
devez d’abord vous assurer que l’attribut enctype du formulaire est fixé
à « multipart/form-data », vous devez donc commencer par une fonction de
création définie comme ci-dessous.
echo $form->create('Document', array('enctype' => 'multipart/form-data') );
// ou
echo $form->create('Document', array('type' => 'file'));
Ensuite, ajoutez une des deux lignes suivantes à votre fichier de vue
formulaire.
echo $form->input('Document.fichiersoumis', array('between'=>'<br />','type'=>'file'));
// ou
echo $form->file('Document.fichiersoumis');
A cause des limitations liées à HTML, il n’est pas possible de définir
une valeur par défaut dans les champs inputs de type “file”. Chaque fois
que le formulaire est affiché, le champ sera vide.
Dès la soumission, les champs de fichier fournissent un tableau étendu
de données au script qui reçoit les données du formulaire.
Dans l’exemple ci-dessus, les valeurs du tableau de données soumis
seraient organisées de la manière suivante, si CakePHP était installé
sur un serveur Windows. “tmp_name” aurait un chemin différent dans un
environnement Unix.
$this->data['Document']['fichiersoumis'] = array(
'name' => planning_conference.pdf
'type' => application/pdf
'tmp_name' => C:/WINDOWS/TEMP/php1EE.tmp
'error' => 0
'size' => 41737
);
Ce tableau est généré par PHP lui-même, donc pour plus de détail sur la
façon dont PHP gère les données passées dans les champ de fichier, lisez
la section sur l’upload de fichier du manuel
PHP.
Valider un upload de fichier
Voici un exemple de méthode de validation que vous pourriez définir dans
votre modèle, afin de vérifier qu’un fichier a été uploadé avec succès.
// Basé sur le commentaire 8 de : https://bakery.cakephp.org/articles/view/improved-advance-validation-with-parameters
function isUploadedFile($params){
$val = array_shift($params);
if ((isset($val['error']) && $val['error'] == 0) ||
(!empty($val['tmp_name']) && $val['tmp_name'] != 'none'))
{
return is_uploaded_file($val['tmp_name']);
} else {
return false;
}
}
Eléments du Formulaire - Méthodes Spécifiques
Les autres méthodes disponibles dans l’Assistant Form permettent la
création d’éléments spécifiques de formulaire. La plupart de ces
méthodes utilisent également un paramètre spécial $options. Toutefois,
dans ce cas, $options est utilisé avant tout pour spécifier les
attributs des balises HTML (comme la valeur ou l’id DOM d’un élément du
formulaire).
<?php echo $form->text('pseudo', array('class' => 'utilisateurs')); ?>
Affichera :
<input name="data[Utilisateur][pseudo]" type="text" class="utilisateurs" id="UtilisateurPseudo" />
checkbox
checkbox(string $fieldName, array $options)
Cette méthode créer une checkbox. Elle génère également un champ input
de type hidden afin de forcer la soumission des données pour le champ
spécifié.
<?php echo $form->checkbox('fait'); ?>
Donnera:
<input type="hidden" name="data[Utilisateur][fait]" value="0" id="UtilisateurFait_" />
<input type="checkbox" name="data[Utilisateur][fait]" value="1" id="UtilisateurFait" />
year
year(string $fieldName, int $minYear, int $maxYear, mixed $selected, array $attributes, mixed $showEmpty)
Crée un menu de sélection composé des années allant de $minYear
à
$maxYear
, avec l’année $selected sélectionnée par défaut.
$selected
peut être soit une année sur quatre chiffres (ex. 2004),
soit la chaîne de caractères “now”. Des attributs HTML peuvent être
fournis dans $attributes.
<?php
echo $form->year('acquis',2000,date('Y'));
?>
Affichera :
<select name="data[Utilisateur][acquis][year]" id="UtilisateurAcquisYear">
<option value=""></option>
<option value="2009">2009</option>
<option value="2008">2008</option>
<option value="2007">2007</option>
<option value="2006">2006</option>
<option value="2005">2005</option>
<option value="2004">2004</option>
<option value="2003">2003</option>
<option value="2002">2002</option>
<option value="2001">2001</option>
<option value="2000">2000</option>
</select>
Si $showEmpty
est faux, le menu de sélection n’incluera pas d’option
vide. Si $showEmpty
est une chaîne de caractères alors celle-ci sera
utilisée comme nom de l’option vide.
<?php
echo $form->year('retourne', 2008, 2010, null, null, 'Sélectionnez une année');
?>
Affichera :
<select name="data[Utilisateur][retourne][year]" id="UtilisateurRetourneYear">
<option value="">Sélectionnez une année</option>
<option value="2010">2010</option>
<option value="2009">2009</option>
<option value="2008">2008</option>
</select>
month
month(string $fieldName, mixed $selected, array $attributes, boolean $showEmpty)
Crée un menu de sélection composé des noms des mois.
<?php
echo $form->month('mob');
?>
Affichera:
<select name="data[User][mob][month]" id="UserMobMonth">
<option value=""></option>
<option value="01">January</option>
<option value="02">February</option>
<option value="03">March</option>
<option value="04">April</option>
<option value="05">May</option>
<option value="06">June</option>
<option value="07">July</option>
<option value="08">August</option>
<option value="09">September</option>
<option value="10">October</option>
<option value="11">November</option>
<option value="12">December</option>
</select>
Vous pouvez insérer votre propre tableau de mois à utiliser, en
définissant l’attribut “monthNames” (CakePHP 1.3 uniquement) ou avoir
les mois affichés sous forme numérique en passant false. (Note : les
mois affichés par défaut sont internationalisés et peuvent être traduits
en utilisant la localisation.)
<?php
echo $form->month('mob', null, array('monthNames' => false));
?>
dateTime
dateTime(string $fieldName, string $dateFormat = ‘DMY’, $timeFormat = ‘12’, mixed $selected, array $attributes, boolean $showEmpty)
Crée un menu de sélection pour la date et le temps. Les valeurs valides
de $dateformat sont ‘DMY’, ‘MDY’, ‘YMD’ ou ‘NONE’. Les valeurs valides
pour $timeFormat sont ‘12’, ‘24’, et ‘NONE’.
day
day(string $fieldName, mixed $selected, array $attributes, boolean $showEmpty)
Crée un menu de sélection composé des jours (numériques) du mois.
Pour créer une option vide avec un texte de votre choix (par exemple, la
première option est « Jour »), vous pouvez définir le texte comme
paramètre final:
<?php
echo $form->day('created');
?>
Devrai afficher:
<select name="data[User][created][day]" id="UserCreatedDay">
<option value=""></option>
<option value="01">1</option>
<option value="02">2</option>
<option value="03">3</option>
...
<option value="31">31</option>
</select>
hour
hour(string $fieldName, boolean $format24Hours, mixed $selected, array $attributes, boolean $showEmpty)
Crée un menu de sélection composé de l’heure du jour.
minute
minute(string $fieldName, mixed $selected, array $attributes, boolean $showEmpty)
Crée un menu de sélection composé des minutes de l’heure.
meridian
meridian(string $fieldName, mixed $selected, array $attributes, boolean $showEmpty)
Crée un menu de sélection composé de ‘am’ et ‘pm’.
error
error(string $fieldName, string $text, array $options)
Affiche un message d’erreur de validation, spécifiée par $texte, pour le
champ donné, dans le cas où une erreur de validation a eu lieu.
Options:
“escape” bool Échapper ou non le contenu de l’erreur.
“wrap” mixed Enveloppe ou non le message d’erreur d’une div. Si c’est
une chaine, elle sera utilisé comme tag HTML.
“class” string Le nom de la class du message d’erreur
file
file(string $fieldName, array $options)
Crée un input de type file.
<?php
echo $form->create('User',array('type'=>'file'));
echo $form->file('avatar');
?>
Devrai afficher:
<form enctype="multipart/form-data" method="post" action="/users/add">
<input name="data[User][avatar]" value="" id="UserAvatar" type="file">
Lors de l’utilisation de $form->file()
, rappelez vous de bien
utilisé l”encoding-type file, en définissant le type en option à
“file” dans $form->create()
hidden
hidden(string $fieldName, array $options)
Crée un champs invisible. Exemple:
<?php
echo $form->hidden('id');
?>
Devrai afficher:
<input name="data[User][id]" value="10" id="UserId" type="hidden">
isFieldError
isFieldError(string $fieldName)
Renvoie vrai si le champ $fieldName a une erreur de validation.
<?php
if ($form->isFieldError('genre')){
echo $form->error('genre');
}
?>
Lors de l’utilisation de $form->input()
, les erreurs sont affichées
par défaut.
label
label(string $fieldName, string $text, array $attributes)
Crée une étiquette (tag label), contenant $text.
<?php
echo $form->label('status');
?>
Devrai afficher:
<label for="UserStatus">Status</label>
password
password(string $fieldName, array $options)
Crée un champs de mot de passe.
<?php
echo $form->password('password');
?>
Devrai afficher:
<input name="data[User][password]" value="" id="UserPassword" type="password">
radio
radio(string $fieldName, array $options, array $attributes)
Crée un bouton de type radio. Utilisez $attributes['value']
pour
définir quel valeur devra être sélectionnée par défaut.
Utilisé $attributes['separator']
pour spécifier le HTML entre les
boutons radio (e.g. <br />).
Les boutons sont enveloppé par défaut d’un label et d’un fieldset.
Définissez $attributes['legend']
à false pour les supprimer.
<?php
$options=array('M'=>'Male','F'=>'Female');
$attributes=array('legend'=>false);
echo $form->radio('gender',$options,$attributes);
?>
Devrai afficher:
<input name="data[User][gender]" id="UserGender_" value="" type="hidden">
<input name="data[User][gender]" id="UserGenderM" value="M" type="radio">
<label for="UserGenderM">Male</label>
<input name="data[User][gender]" id="UserGenderF" value="F" type="radio">
<label for="UserGenderF">Female</label>
Si pour n’importe quel raison vous ne voulez pas de l”input caché,
définissez $attributes['value']
par une valeur à sélectionnée ou une
boolean à false.
select
select(string $fieldName, array $options, mixed $selected, array $attributes, boolean $showEmpty)
Crée un menu de sélection, composé des éléments de $options
, avec
l’option spécifiée par $selected
qui sera le champ sélectionné par
défaut. Définissez $showEmpty
à false si vous ne voulez pas
afficher le champ vide.
<?php
$options=array('M'=>'Homme','F'=>'Femme');
echo $form->select('sexe',$options)
?>
Devrai afficher:
<select name="data[User][sexe]" id="UserSexe">
<option value=""></option>
<option value="M">Homme</option>
<option value="F">Femme</option>
</select>
submit
submit(string $caption, array $options)
Crée un bouton de soumission de formulaire avec une legende
$caption
. Si $caption
est l’URL d’image (qui contient un ‘.’),
le bouton sera afficher en temps qu’image.
Il est enveloppé d’une div
par défaut; vous pouvez annuler cette
déclaration $options['div'] = false
.
<?php
echo $form->submit();
?>
Devrai afficher:
<div class="submit"><input value="Submit" type="submit"></div>
Vous pouvez définir une url d’image relative ou absolue pour la légende
à la place d’un texte comme légende.
<?php
echo $form->submit('ok.png');
?>
Devrai afficher:
<div class="submit"><input type="image" src="/img/ok.png"></div>
text
text(string $fieldName, array $options)
Crée un champ de texte.
<?php
echo $form->text('prenom');
?>
Devrai afficher:
<input name="data[User][prenom]" value="" id="UserPrenom" type="text">
textarea
textarea(string $fieldName, array $options)
Crée un champ de zone de texte.
<?php
echo $form->textarea('notes');
?>
Devrai afficher:
<textarea name="data[User][notes]" id="UserNotes"></textarea>