Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 31-01-2009 14:37:06

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

[Zf1.7.3][Zend_Form_elt_File] Problème de validation ?

Bonjour,

J'essaie de faire un formulaire dans lequel j'ai un un élement file pour l'upload de fichier, mais je rencontre un énorme problème lors de la validation de ce formulaire. En effet, je me prends une exception indiquant ""img" not found by file transfer adapter" lors de l'appel à la ligne suivante :

Code:

if($this->getRequest()->isPost() && $form->isValid($_POST))

La méthode isValid lancerait l'upload du fichier ?! Je comprends que ça bug alors puisqu'il ne peut rien y avoir de remplis dans le formulaire à cette étape. (Je décide s'il faut afficher le formulaire ou faire un traitement à travers cette condition).

Est-ce qu'il est possible de faire la validation du formulaire sans valider le file à cette étape ? Ou bien vous avez une autre solution ?

Merci d'avance.

Hors ligne

 

#2 31-01-2009 19:14:46

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Zf1.7.3][Zend_Form_elt_File] Problème de validation ?

Hello,

As-tu fait un setEnctype() ?

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#3 31-01-2009 22:58:55

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: [Zf1.7.3][Zend_Form_elt_File] Problème de validation ?

Oui, en multipart/form-data...

Hors ligne

 

#4 01-02-2009 10:54:56

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Zf1.7.3][Zend_Form_elt_File] Problème de validation ?

Hello,

Ton élément File, est-il obligatoire ('required' = true) ?

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#5 01-02-2009 11:41:53

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: [Zf1.7.3][Zend_Form_elt_File] Problème de validation ?

Oui, même si je n'ai pas bien compris pourquoi on était obligé de le mentionnr obligatoire.

Voici les caracts de mon élement :

Code:

'img' => array('file', array(
                    'label' => "Image :",
                    'required' => true,
                    'validators' => array(
                        'Count' => array('min' => 0, 'max' => 1),
                        'isImage' => 'jpg,jpeg,png,gif',
                        
                    ),
                    'decorators' => $elementDecorator
                )),

Hors ligne

 

#6 01-02-2009 14:44:08

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Zf1.7.3][Zend_Form_elt_File] Problème de validation ?

Hello,

T'es pas obligé de le mettre à true, heureusement.

As-tu défini des décorateurs particuliers pour ton élément ?

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#7 01-02-2009 21:46:32

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: [Zf1.7.3][Zend_Form_elt_File] Problème de validation ?

Euh non, ce qu'il y a de plus classique...

Code:

$elementDecorator = array(
            'ViewHelper',
            'Errors',
            array(array('data' => 'HtmlTag'), array('tag' => 'td')),
            array('Label', array('tag' => 'th')),
            array(array('row' => 'HtmlTag'), array('tag' => 'tr'))
        );

Hors ligne

 

#8 01-02-2009 21:54:15

baboune
Membre
Date d'inscription: 29-11-2008
Messages: 103

Re: [Zf1.7.3][Zend_Form_elt_File] Problème de validation ?

j'essaierai sans ton validator count (voir tous) :

Code:

'validators' => array(
                        'Count' => array('min' => 0, 'max' => 1),

d'après la doc :

Code:

// Exemple pour 1.6
$upload = new Zend_File_Transfer_Adapter_Http();
$upload->addValidator('Count', array(2, 3));

// Même exemple pour 1.7
$upload = new Zend_File_Transfer_Adapter_Http();
$upload->addValidator('Count', false, array('min' => 2, 'max' => 3));

Dernière modification par baboune (01-02-2009 21:59:11)

Hors ligne

 

#9 02-02-2009 07:55:42

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Zf1.7.3][Zend_Form_elt_File] Problème de validation ?

Hello,

C'est bien ce que je dis. Et le décorateur 'File', il aurait pas un peu disparu ? wink

Code:

$elementDecorator = array('File',
            'ViewHelper',
            'Errors',
            array(array('data' => 'HtmlTag'), array('tag' => 'td')),
            array('Label', array('tag' => 'th')),
            array(array('row' => 'HtmlTag'), array('tag' => 'tr'))
        );

La correction de ce "bug", qui permet de décorer sans le décorateur 'File', apparaitra en 1.8.0.

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#10 03-02-2009 10:59:32

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: [Zf1.7.3][Zend_Form_elt_File] Problème de validation ?

Avec ou sans les validator, et/ou avec ou sans le décorateur File, j'ai toujours la même exception qui se déclanche lors du isValid du formulaire hmm

//edit: sauf qu'en fait, j'ai une nouvelle erreur concernant la méthode getMaxFileSize :

Warning: Exception caught by form: Method getMaxFileSize does not exist Stack Trace:

J'ai essayé en rajoutant 'MaxFileSize' => 50000, à mon élément, mais il n'a pas l'air de le prendre en compte hmm

Merci à vous deux de m'accorder du temps pour régler mon problème.

Dernière modification par Akis (03-02-2009 11:15:42)

Hors ligne

 

#11 03-02-2009 11:22:18

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Zf1.7.3][Zend_Form_elt_File] Problème de validation ?

Hello,

Il FAUT le décorateur File. Car il ajoute entre autre un élément hidden 'MAX_FILE_SIZE'.
Quand ton formulaire est généré, as-tu bien ce champs hidden ?

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#12 03-02-2009 12:53:19

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: [Zf1.7.3][Zend_Form_elt_File] Problème de validation ?

Oui, j'ai bien compris qu'il le fallait, mais avec les données précédentes données, il me renvoie cette erreur de getMaxFileSize... quand il essaie de générer le formulaire.

Hors ligne

 

#13 03-02-2009 13:07:37

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Zf1.7.3][Zend_Form_elt_File] Problème de validation ?

Hello,

Je n'ai pas les versions 1.7.3 ou 1.7.4 sous la main pour vérifier si la fonction getMaxFileSize() est bien présente dans Zend/Form/Element/File.php . Si c'est le cas, envoie le Stack Trace.

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#14 13-02-2009 21:56:09

eMeRiKa
Membre
Lieu: Paris
Date d'inscription: 05-02-2009
Messages: 50
Site web

Re: [Zf1.7.3][Zend_Form_elt_File] Problème de validation ?

Bonjour,

J'ai le même problème, j'ai pourtant bien un décorateur 'File' et la méthode getMaxFileSize existe bien dans Zend/Form/Element/File.php

Code:

Warning: Exception caught by form: Method getMaxFileSize does not exist Stack Trace: #0 [internal function]: Zend_Form_Element->__call('getMaxFileSize', Array) #1 G:\Programmation\projet\library\Zend\Form\Decorator\File.php(100): Zend_Form_Element_Text->getMaxFileSize() #2 G:\Programmation\projet\library\Zend\Form\Element.php(1910): Zend_Form_Decorator_File->render('') #3 G:\Programmation\projet\library\Zend\Form\Decorator\FormElements.php(100): Zend_Form_Element->render() #4 G:\Programmation\projet\library\Zend\Form.php(2595): Zend_Form_Decorator_FormElements->render('') #5 G:\Programmation\projet\library\Zend\Form.php(2610): Zend_Form->render() #6 G:\Programmation\projet\application\modules\default\views\scripts\skin\add.phtml(24): Zend_Form->__toString() #7 G:\Programmation\projet\library\Zend\View.php(107): include('G:\Pr...') #8 G:\Programmation\projet\library\Zend\View\Abstrac in G:\Programmation\projet\library\Zend\Form.php on line 2615

Pour ajouter le maxFileSize j'ai testé de mettre ces 2 lignes, soit que le setMaxFileSize ou les 2 en même temps.

Code:

$form->setMaxFileSize(1000000);
$form->addValidator('Size', false, 1000000);

Dans le fichier Zend/Form/Element/File.php je suis allé voir d'où vient le problème et j'ai fait un Zend_Debug::dump, il me retourne :

Code:

object(Zend_Form_Element_Text)#95 (26) {
...

Cela devrait être un Zend_Form_Element_File plutôt non ?

Dernière modification par eMeRiKa (13-02-2009 22:31:30)

Hors ligne

 

#15 13-02-2009 23:21:30

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Zf1.7.3][Zend_Form_elt_File] Problème de validation ?

Hello,

C'est sans doute pour ça qu'il ne trouve pas la méthode. C'est quoi ton code de création du formulaire ?

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#16 14-02-2009 00:14:52

eMeRiKa
Membre
Lieu: Paris
Date d'inscription: 05-02-2009
Messages: 50
Site web

Re: [Zf1.7.3][Zend_Form_elt_File] Problème de validation ?

alors le code de création :

Code:

$form->setAction($this->view->link('skin', 'add', 'default'))
             ->setMethod('post')
             ->setAttrib('enctype', 'multipart/form-data');

$form->addElementPrefixPath('Egame_Form_Decorator', 'Egame/Form/Decorator/', 'decorator');

        /* le titre */
        $nom = $form->createElement('text', 'nom');
        $nom->setLabel($this->view->translate('nom'))
              ->addValidator('stringLength', false, array(0, 30))
              ->setRequired(true);

        $screen = $form->createElement('file', 'screen');
        $screen->setLabel($this->view->translate('screen'))
               ->setRequired(true)
               ->setDestination('public/images/themes')               
               ->addValidator('Count', false, 1) // ensure only 1 file
               ->addValidator('Size', false, 2000000)
               ->setMaxFileSize(2000000) // limit to 100K
               ->addValidator('Extension', false, 'jpg');


        /* le textarea */
        $infos = $form->createElement('textarea', 'infos', array('cols' => '77', 'rows' => '25'));
        $infos->setLabel($this->view->translate('infos'))
              ->setRequired(true);

        /* Le token */
        $token = new Zend_Form_Element_Hash('token', 'no_csrf_foo', array('salt' => 'unique'));

        // Add elements to form:
        $form->addElement($nom)
             ->addElement($screen)
             ->addElement($infos)
             ->addElement($token)
             // use addElement() as a factory to create 'Login' button:
             ->addElement('image', 'btn_ok', array('label' => 'btn_ok', 'src' => $this->view->baseurl().'/public/'.$_SESSION['lang'].'/images/btn_ok.png'));

Le problème est que l'erreur survient sur tout mes formulaires depuis que j'ai ajouté le décorateur 'File' dans ma classe qui gère les décorateurs.

Hors ligne

 

#17 14-02-2009 00:23:55

eMeRiKa
Membre
Lieu: Paris
Date d'inscription: 05-02-2009
Messages: 50
Site web

Re: [Zf1.7.3][Zend_Form_elt_File] Problème de validation ?

En faite dans ma classe, le décorateur File est ajouté à tous les éléments d'où l'erreur.

J'ai donc supprimé la ligne 'File' de cette classe et je l'ai rajouté au moment de la création du formulaire :

Code:

$form->addDecorator('File');

Mais dans le code source, pas de trace du champ hidden Max File Size, quelle est la bonne pratique pour l'ajouter ?

Merci.

Hors ligne

 

#18 14-02-2009 08:40:10

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Zf1.7.3][Zend_Form_elt_File] Problème de validation ?

Hello,

Je crois qu'on s'est mal compris. Le décorateur File doit être présent pour les éléments File pas pour les autres éléments.

Si je reprends tes premiers exemples :

Code:

$elementDecorator = array('File',
            'ViewHelper',
            'Errors',
            array(array('data' => 'HtmlTag'), array('tag' => 'td')),
            array('Label', array('tag' => 'th')),
            array(array('row' => 'HtmlTag'), array('tag' => 'tr'))
        );
'img' => array('file', array(
                    'label' => "Image :",
                    'required' => true,
                    'validators' => array(
                        'Count' => array('min' => 0, 'max' => 1),
                        'isImage' => 'jpg,jpeg,png,gif',
                        
                    ),
                    'decorators' => $elementDecorator
                )),

C'est donc $screen->addDecorator(...) et pas $form->addDecorator(...).

A+

Dernière modification par mikaelkael (14-02-2009 08:41:22)


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#19 14-02-2009 10:59:52

eMeRiKa
Membre
Lieu: Paris
Date d'inscription: 05-02-2009
Messages: 50
Site web

Re: [Zf1.7.3][Zend_Form_elt_File] Problème de validation ?

J'ai beau mettre :

Code:

$screen->setLabel($this->view->translate('screen'))
               ->setDecorators(array(array('File'),
                                    array('ViewHelper'),
                                    array('Label'),
                                    array('Errors', array('placement' => 'append')),
                                    array('Description', array('tag' => '')),
                                    array('HtmlTag', array('tag' => 'div')),
                                    array('decorator' => array('Holder' => 'HtmlTag'), 'options' => array('tag' => 'div', 'class' => 'ctrlHolder'))
                                    ))

Il ne me rajoute pas le champ hidden alors je l'ai rajouté manuellement :

Code:

$maxfile = $form->createElement('hidden', 'MAX_FILE_SIZE', array('value' => '5000000'));

Hors ligne

 

#20 14-02-2009 12:25:30

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Zf1.7.3][Zend_Form_elt_File] Problème de validation ?

Hello,

Sur une 1.7.4, j'ai créé un fichier test.php contenant :

Code:

require_once 'Zend/View.php';
require_once 'Zend/Form.php';
require_once 'Zend/Form/Element/Hash.php';
$view = new Zend_View();
$form = new Zend_Form();
$form->setView($view);

$form->setAction('skin')
             ->setMethod('post')
             ->setAttrib('enctype', 'multipart/form-data');

$form->addElementPrefixPath('Egame_Form_Decorator', 'Egame/Form/Decorator/', 'decorator');

        /* le titre */
        $nom = $form->createElement('text', 'nom');
        $nom->setLabel($view->translate('nom'))
              ->addValidator('stringLength', false, array(0, 30))
              ->setRequired(true);

        $screen = $form->createElement('file', 'screen');
        $screen->setLabel($view->translate('screen'))
               ->setRequired(true)
               //->setDestination('public/images/themes')               
               ->addValidator('Count', false, 1) // ensure only 1 file
               ->addValidator('Size', false, 2000000)
               ->setMaxFileSize(2000000) // limit to 100K
               ->addValidator('Extension', false, 'jpg');


        /* le textarea */
        $infos = $form->createElement('textarea', 'infos', array('cols' => '77', 'rows' => '25'));
        $infos->setLabel($view->translate('infos'))
              ->setRequired(true);

        /* Le token */
        $token = new Zend_Form_Element_Hash('token', 'no_csrf_foo', array('salt' => 'unique'));

        // Add elements to form:
        $form->addElement($nom)
             ->addElement($screen)
             ->addElement($infos)
             ->addElement($token)
             // use addElement() as a factory to create 'Login' button:
             ->addElement('image', 'btn_ok', array('label' => 'btn_ok', 'src' => '/public/fr/images/btn_ok.png'));
echo $form->render();

J'ai du modifié quelques lignes pour que ça passe chez moi (les helpers $this->view et la destination du file), et ça me renvoie :

Code:

<form enctype="multipart/form-data" action="skin" method="post"><dl class="zend_form">
<dt><label for="nom" class="required">nom</label></dt>
<dd>
<input type="text" name="nom" id="nom" value=""></dd>
<dt><label for="screen" class="required">screen</label></dt>
<dd>
<input type="hidden" name="MAX_FILE_SIZE" value="2000000" id="MAX_FILE_SIZE">
<input type="file" name="screen" id="screen"></dd>
<dt><label for="infos" class="required">infos</label></dt>
<dd>
<textarea name="infos" id="infos" cols="77" rows="25"></textarea></dd>
<dt>&nbsp;</dt>
<dd>
<input type="hidden" name="token" value="97d185020c2d486637faca6470660f03" id="token"></dd>
<dt><label for="btn_ok" class="optional">btn_ok</label></dt>
<dd>
<input type="image" name="btn_ok" id="btn_ok" src="/public/fr/images/btn_ok.png" alt="btn_ok"></dd></dl></form>

C'est du brut ZF sans aucune autre library. Tu as une autre action quelquepart qui te flingues quelquechose, si ton rendu n'est pas celui-ci.

A+

Dernière modification par mikaelkael (14-02-2009 12:29:34)


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#21 14-02-2009 15:24:10

eMeRiKa
Membre
Lieu: Paris
Date d'inscription: 05-02-2009
Messages: 50
Site web

Re: [Zf1.7.3][Zend_Form_elt_File] Problème de validation ?

Merci beaucoup pour ces informations.

J'ai effectivement une classe qui gère les décorateurs, c'est de là que doit venir le problème. J'ai ajouté manuellement le champ input max file size et cela marche, donc pas de problème.

Hors ligne

 

#22 15-02-2009 21:55:14

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: [Zf1.7.3][Zend_Form_elt_File] Problème de validation ?

Bonjour mikaelkael,

Désolé pour le temps après ma dernière réponse sur le sujet mais j'étais pas mal occupé par autre chose et je viens à peine de me remettre là dessus.

Concernant mon problème, cela venait effectivement du fait que j'appliquais le décorateur File à tous les champs au lieu de ne l'appliquer qu'au champ File wink

Merci.

Hors ligne

 

#23 22-02-2009 14:57:06

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: [Zf1.7.3][Zend_Form_elt_File] Problème de validation ?

Par contre, j'ai deux champs file identique (même nom) qui apparaissent sur ma page alors que j'ai qu'une seule directive pour un file input.

A quoi cela est du ?

Hors ligne

 

#24 19-06-2009 10:29:02

throrin19
Membre
Date d'inscription: 01-03-2009
Messages: 318
Site web

Re: [Zf1.7.3][Zend_Form_elt_File] Problème de validation ?

enlève dans ton setDecorators le array('ViewHelper'), j'ai eu le même problème tut à l'heure et je l'ai résolu comme sa.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages