7.3.4 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'));
echo $form->create('Document', array('enctype' => 'multipart/form-data') );// ouecho $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');
echo $form->input('Document.fichiersoumis', array('between'=>'<br />','type'=>'file'));// ouecho $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
);
$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.
7.3.4.1 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 : http://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;
}
}
// Basé sur le commentaire 8 de : http://bakery.cakephp.org/articles/view/improved-advance-validation-with-parametersfunction 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;}}


























