IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Form PHP Discussion :

Validation d'un formulaire contenant un champ 'File'


Sujet :

Zend_Form PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 83
    Points
    83
    Par défaut Validation d'un formulaire contenant un champ 'File'
    Bonjour,

    J'essaye de créer un formulaire avec un 'File' Voilà dans mon Form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $image = new Zend_Form_Element_File('image');
    		$image->setLabel('Image')
    				->addValidator('Size', false, '10MB')
    				->addValidator('Extension', false,'jpg,png,gif')
    				->setDecorators(
    						array('File', 'Description', 'Errors',
    							array(array('data'=>'HtmlTag'), array('tag' => 'td')),
    							array('Label', array('tag' => 'th')),
    							array(array('row'=>'HtmlTag'),array('tag'=>'tr'))
    						)
    					)
    				->setAttrib('id', 'image')
    				->setValueDisabled(true);
    Et dans mon contrôleur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    public function addactuAction()
        {
    		$this->view->titre = 'Ajout d\'une actualitée';
     
    		$formActu = new Application_Form_Actualites();
     
    		$this->view->form = $formActu;
     
    		if ($this->getRequest()->isPost()) {
    			$formData = $this->getRequest()->getPost();
    			if ($formActu->isValid( $formData )) {
     
    				$linkFile = $this->getFrontController()->getBaseUrl() . "/download/";
     
    				$upload = new Zend_File_Transfer_Adapter_Http();
    				$upload->setDestination($linkFile);
     
     
    				// Retourne toutes les informations connues sur le fichier
    				$files = $upload->getFileInfo();
     
    				foreach ($files as $file => $info) {
    					// Fichier uploadé ?
    					if (!$upload->isUploaded($file)) {
    						echo "Pourquoi n'avez-vous pas uploadé ce fichier ?";
    						continue;
    					}
     
    					// Les validateurs sont-ils OK ?
    					if (!$upload->isValid($file)) {
    						echo "Désolé mais $file ne correspond à ce que nous attendons";
    						continue;
    					}
    				}
     
    				$upload->receive();
    			}
    			else {
                    $formActu->populate($formData);
                }
    		}
        }
    Mon problème est qu'il plante sur le setDestination. Je voudrais lui donner une url spécifique qui se mettra du genre dans public/download/

    Merci

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 118
    Points : 184
    Points
    184
    Par défaut
    Bonjour,

    Définit ton setDestination dans le code de ton formulaire.

    Zend_Form_Element_File->setDestination('...')

    par contre ne pas oublier de définir enctype
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    /* le formulaire */
    $this->setAttribs(array(  'id' => 'id_form_image' 
    				, 'enctype' => 'multipart/form-data'
    				));
    Apprendre c'est se faciliter la vie !
    http://e-tuto.fr

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 83
    Points
    83
    Par défaut
    Citation Envoyé par freeseb74 Voir le message
    Bonjour,

    Définit ton setDestination dans le code de ton formulaire.

    Zend_Form_Element_File->setDestination('...')

    par contre ne pas oublier de définir enctype
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    /* le formulaire */
    $this->setAttribs(array(  'id' => 'id_form_image' 
    				, 'enctype' => 'multipart/form-data'
    				));
    Bonjour, merci pour ta réponse.

    Tout d'abord, le 'enctype' => 'multipart/form-data', je le defini dans le formulaire $this->setAttrib('enctype', 'multipart/form-data');.

    Ensuite si je met dans le formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $image->setLabel('Image')
    				->addValidator('Size', false, '10MB')
    				->addValidator('Extension', false,'jpg,png,gif')
    				->setDecorators(
    						array('File', 'Description', 'Errors',
    							array(array('data'=>'HtmlTag'), array('tag' => 'td')),
    							array('Label', array('tag' => 'th')),
    							array(array('row'=>'HtmlTag'),array('tag'=>'tr'))
    						)
    					)
    				->setAttrib('id', 'image')
    				->setValueDisabled(true)
                    ->setDestination("/download/");
    Il me sort une erreur....

    Je ne vois pas laquelle....

    Merci

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 76
    Points : 207
    Points
    207
    Par défaut
    La destination ne correspond pas à l'URL du fichier, mais au répertoire du disque.
    Donc, il faut mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ->setDestination(APPLICATION_PATH.'/../public/download')
    APPLICATION_PATH devrait être défini si tu as configuré en utilisant le tutoriel de Zend.
    Il pointe vers le répertoire "application".

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 83
    Points
    83
    Par défaut
    Citation Envoyé par Blount Voir le message
    La destination ne correspond pas à l'URL du fichier, mais au répertoire du disque.
    Donc, il faut mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ->setDestination(APPLICATION_PATH.'/../public/download')
    APPLICATION_PATH devrait être défini si tu as configuré en utilisant le tutoriel de Zend.
    Il pointe vers le répertoire "application".
    re,

    J'avais essayé mais il ne l'insert pas dans le repertoire....
    Il me sort bien qu'il a uploadé mais il ne le met pas....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    if ($this->getRequest()->isPost()) {
    			$formData = $this->getRequest()->getPost();
                if ($formActu->isValid( $formData )) {
    				$linkFile = $this->getFrontController()->getBaseUrl() . "/download/";$upload = new Zend_File_Transfer();
     
     
    				// Retourne toutes les informations connues sur le fichier
    				$files = $upload->getFileInfo();
     
    				$cptFile = 0;
     
    				foreach ($files as $file => $info) {
    					// Fichier uploadé ?
    					if (!$upload->isUploaded($file)) {
    						//echo "Pourquoi n'avez-vous pas uploadé ce fichier ?";
    						continue;
    					}
     
    					// Les validateurs sont-ils OK ?
    					if (!$upload->isValid($file)) {
    						//echo "Désolé mais $file ne correspond à ce que nous attendons";
    						continue;
    					}
     
    					$cptFile++;
    				}
     
    				if($cptFile > 0) {
    					$upload->receive();
    				}
    				else
    					Zend_Debug::dump ("Aucun Fichier envoyé");
    			}
    			else {
                    $formActu->populate($formData);
                }
    		}

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 76
    Points : 207
    Points
    207
    Par défaut
    Normalement, il est inutile d'avoir toutes ces lignes.
    L'upload se fait automatiquement dès que tu appels la méthode "getValues" du formulaire, comme l'indique la doc :
    Par défaut, le fichier sera automatiquement reçu quand vous appellerez getValues() sur le formulaire. La raison derrière ce comportement est que le fichier lui même est la valeur de l'élément fichier.

    $form->getValues();

    Note: Ainsi, un appel supplémentaire de receive() après avoir appellé getValues() n'aura aucun effet. De même, créer une instance de Zend_File_Transfer n'aura aucun effet non plus puisqu'il n'y aura plus de fichier à recevoir.

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 83
    Points
    83
    Par défaut
    Citation Envoyé par Blount Voir le message
    Normalement, il est inutile d'avoir toutes ces lignes.
    L'upload se fait automatiquement dès que tu appels la méthode "getValues" du formulaire, comme l'indique la doc :
    re, encore merci !

    Mais alors comment savoir s'il y a bien eut un fichier de transmis ???

    A+

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 76
    Points : 207
    Points
    207
    Par défaut
    Tu vérifies le contenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if ($form->getValue('nomDuChampFile')) {
        // un fichier existe
    }

Discussions similaires

  1. [2.x] Editer un formulaire avec un champ file
    Par LeGilou dans le forum Symfony
    Réponses: 4
    Dernier message: 25/09/2013, 10h39
  2. [2.x] Validation d'un formulaire contenant des entités
    Par guillaume40 dans le forum Symfony
    Réponses: 0
    Dernier message: 21/06/2011, 14h22
  3. [formulaire] réinitialiser un champ de type file
    Par Baadshah dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 20/12/2005, 14h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo