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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    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 expérimenté
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 118
    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'
    				));

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

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    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 éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 77
    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 éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    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 éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 77
    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.

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