Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
je ne savais pas où poster à propos de ce nouveau composant, merci aux admins de déplacer le topic dans le forum adéquat.
J'aimerai uploader des images sur mon serveur, j'utilise le modèle MVC, et je débute. Tous les ingrédients pour être paumé (surtout le dernier )
J'ai placé le code suivant dans mon modèle
$logo = new Zend_Form_Element_File('logo'); $logo->setLabel('Logo') ->addValidator('Size', false, 202400) ->addValidator('Extension', array('gif', 'jpg', 'png'));
et celui ci dans le controleur associé:
$adapter = new Zend_File_Transfer_Adapter_Http(); $adapter = $form->logo->getTransferAdapter(); $adapter->setDestination('C:\wamp\www\projet\public\upload'); if (!$adapter->isValid('logo')) { print_r($adapter->getMessages()); } try { $adapter->receive(); } catch (Zend_File_Transfer_Exception $e) { $e->getMessage(); }
Rien ne se passe, le fichier n'est pas uploadé. J'ai du louper un truc quelque part, forcement.
J'ai essayé plusieurs trucs, mais rien à faire ... est ce que quelqu'un aurait une idée?
Merci d'avance pour votre aide,
Julien
Hors ligne
Je suis en plein dedans aussi, et j'ai un probleme pour l'upload de plusieurs fichiers dans des subForms mais pour un seul fichier ce la fonctionne :
Il faut rajouter le ->setRequired(true) sinon il ne fait rien silencieusement.
Formulaire :
$form= new Zend_Form(); $form->setName ( 'Avion' )->setAttrib('id','Avion')->setMethod('post'); $form->setAttrib('enctype', 'multipart/form-data'); // IMPORTANT $uploadPath= realpath('.') . '/upload'; $photo= new Zend_Form_Element_File('avion_photo'); $photo->addValidator('Count', false, 1)// ensure only 1 file ->addValidator('Extension', false, 'jpg,png,gif') ->setDestination( $uploadPath ); //IMPORTANT $photo->setRequired(true) //IMPORTANT ->setLabel('photo'); $form->addElement( $photo );
Controleur :
........... if ( $form->isValid( $formData ) ) { // pour remplir ma base correctement //avion_photo est le nom de l'élément File $formData['avion_photo']= basename( $form->avion_photo->getValue() ); $form->populate ( $formData ); $newRow= $this->objet->createRow( $formData ); try { $newRow->save(); } catch (Exception $e) { Zend_Debug::dump($e, 'e'); } $this->_redirect ( '/avion/index' ); } else { $form->populate ( $formData ); }
Le isValid() lance chaque isValid() des élements, mais l'élément File lance l'$adapter->receive() donc pas besoin de receive() apres un isValid(). Je trouve d'ailleurs pas évident que la validation fasse un upload de fichier.
Hors ligne
Pas encore touché à ce composant, mais il n'est pas en version finale, il est encore en cours de développement
Hors ligne
Merci fte en m'inspirant de ton code j'arrive à uploader mon image. Il faudrait que j'en uploade 3 depuis le meme formulaire, ça fonctionne chez toi?
Hors ligne
Tjrs le meme pb des file dans des subforms ; Je fais un grid edit sous forme de table, avec un subform par ligne tr.
Dernière modification par fte (06-09-2008 09:43:00)
Hors ligne
Julien a écrit:
Pas encore touché à ce composant, mais il n'est pas en version finale, il est encore en cours de développement
hmm.
Si il n'était pas finalisé, pourquoi serait-il dans le 1.6 ?? (il n'est plus dans l'incubateur)
Hors ligne
Hello !
J'utilise ce composant en ce moment même.
Le fichier est surement uploader (print_r($_FILES)), mais c'est le renommage qui doit déconner à mon avis.
Je vais chercher
Hors ligne
a fait 30min que je cherche, et je viens de me rendre compte que ca fonctionnait
voilà ce qui marche pour moi :
$this->addElement('file', 'input_file', array( 'decorators' => $this->_standardElementDecorator, 'label' => 'Fichier d\'entrée:', 'required' => true, ));
un echo $form->input_file->getValue() renvoi le bon chemin
Hors ligne
nORKy a écrit:
Julien a écrit:
Pas encore touché à ce composant, mais il n'est pas en version finale, il est encore en cours de développement
hmm.
Si il n'était pas finalisé, pourquoi serait-il dans le 1.6 ?? (il n'est plus dans l'incubateur)
je l'utilise actuellement, et je confirme, on est loin de la version finale, il suffit de jeter un coup d'oeil dans le isssue tracker de Zend Framework pour voir le nombre de méthodes qui restent à implémenter.
Même dans le code source :
public function getFile()
{
require_once 'Zend/File/Transfer/Exception.php';
throw new Zend_File_Transfer_Exception('Method not implemented');
}
C'est surement suffisant pour de l'upload simple. Pour ma part, je ne trouve pas tout à fait mon compte pour l'upload multiple.
Hors ligne
d'ailleurs, il n'y a pas une fonction pour supprimer le fichier uploadé ?
Car, mon utilisation actuelle est juste du traitement de données ; une fois traité, je n'ai plus besoin du fichier
Hors ligne
Hello,
Comme je l'ai écrit ici. La version 1.6.1 arrive rapidement avec pas mal de boulot pour Zend_Form_File.
A+
Hors ligne
Je n'arrive pas à m'en sortir avec l'upload multiple, est-ce que qq'un aurait un exemple qui fonctionne? (je cherche a uploader 3 images depuis le meme form)
j'attend la 1.6.1 avec impatience (hey ca ne fait que 3 semaines que je planche sur zf mais j'aime beaucoup)
Hors ligne
moi, je m'en de l'exemple de la doc, j'ai posté le code qui créé mon élement un peu plus haut
Je m'en sers pour envoyer des csv et faire du parsing.
Hors ligne
Hello,
nORKy, si la doc est erronée, il faut tant que possible faire remonter l'info. Je sais c'est parfois fastidieux mais ça aide tout le monde.
Message d'hier sur la façon de remonter les problèmes.
A+
Hors ligne
t'inquiete, j'ai oublié des mots
Je voulais dire, je m'en suis servi de l'exemple de la doc
Pour moi, ce qui est dans la doc fonctionne. (mais je l'utilise de la manière la plus simple)
Dernière modification par nORKy (10-09-2008 14:15:21)
Hors ligne
Hello,
Je trouvais les termes étonnant de ta part . C'est mieux avec une phrase complète .
A+
Hors ligne
Concernant l'élement File dans un SubForm, ca a bougé dans le svn et il y a meme un billet qui en parle :
http://www.thomasweidner.com/flatpress/ … -elements/
Hors ligne
perso je ne suis pas arrivé à m'en sortir ... j'ai utilisé la méthode expliqué dans un tuto Akrabat et ça fonctionne très bien!
Hors ligne
Salut,
moi c'est pareil, j'ai du mal avec l'upload multiple.
Dans mon subform "Documents" (les constantes sont dans mon config.ini):
private $fileName = "files"; ... $file = new Zend_Form_Element_File($this->fileName); $file->setLabel('Upload files:') ->setDestination($uploadConfig->path) ->addValidator('Count', false, $uploadConfig->count) ->addValidator('Size', false, $uploadConfig->maxsize) ->addValidator('Extension', false, $uploadConfig->extension) ->setMultiFile(3) ->setTransferAdapter(new Atf_File_Transfer_Adapter());
J'ai juste étendu l'adapter http pour y ajouter un getter sur l'array _files (ou sur la methode _getFiles)
class Atf_File_Transfer_Adapter extends Zend_File_Transfer_Adapter_Http { public function getFiles($key) { return $this->_files; //return $this->_getFiles($key); } }
Dans mon action controller, apres un $form->isValid($formData):
$fileElement = $form->getSubForm("Documents")->getElement("files"); $files = $fileElement->getTransferAdapter()->getFiles("files");
Même en accedant directement à _files je me recupere tjs cette exception lancée par _getFiles
Type : Zend_File_Transfer_Exception Message : "files_1_" not found by file transfer adapter File : C:\Software\xampp-1.6.3\htdocs\ATF2\library\Zend\File\Transfer\Adapter\Abstract.php Line : 1159
Il y eu des commit ce w-e dans le trunk, les modifs portant sur les validators d'un file element...
Hors ligne