Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 18-12-2014 11:30:55

Seryus
Membre
Date d'inscription: 17-02-2012
Messages: 128

[ZF2.3]Upload de fichier

Bonjour,

J'essaie de proposer des upload de fichier dans mon application et j'aimerais que le fichier uploadé soit renommé en fonction de l'id de l'enregistrement créé dans la base de données au moment de son upload.

Voici ce que j'ai fait pour le moment :

Code:

[lang=php]
// Je récupère les données
$form->setData(
    array_merge_recursive(
        (array)$this->getRequest()->getPost(),
        $this->getRequest()->getFiles()->toArray()
    )
);

// Je valide mon formulaire
if($form->isValid() {
    $data = $form->getData();
    
    // J'enregistre les données dans la base de données
    $entityManager->persist($data);    
    $entityManager->flush();
    
    // Je créé mon filtre qui va renommer le fichier uploadé
    $filter = new \Zend\Filter\File\RenameUpload('./data/upload/' . $data->getId());
    $filter->setOptions(array(
        'use_upload_extension' => true,
        'overwrite' => true,
    ));
    
    // J'utilise ce filtre pour déplacer mon fichier
    $filter->filter($form->get('fieldset')->get('field')->getValue()['tmp_name']);
}

Mais ça ne fonctionne pas comme je le voudrais : l'extension du fichier uploadé n'est pas conservé, il devient .tmp.

Je suppose que c'est dû au $form->get('fieldset')->get('field')->getValue()['tmp_name'] qui me retourne le chemin temporaire du fichier uploadé (avec l'extension .tmp), mais je n'arrive pas à récupérer l'extension du fichier seul.

$form->get('fieldset')->get('field')->getValue() est un tableau qui contient :
_ Le nom d'origine du fichier ("monFichier.png"),
_ Le type MIME du fichier ("image/png"),
_ Le chemin temporaire ("./tmp/fichierTemporaire.tmp")

Ce que je voudrais faire ne me semble pas compliqué, comment dois-je m'y prendre ?

Merci de votre aide !

Dernière modification par Seryus (18-12-2014 16:44:41)

Hors ligne

 

#2 18-12-2014 15:29:59

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: [ZF2.3]Upload de fichier

Salut, pourquoi tu utilises pas les fonctions natives de PHP pour gérer les fichiers une fois que tu as l'url du fichier temporaire. C'est pas forcément utilise de passer par le ZF2 pour ce genre de choses surtout si c'est pour perdre plus de temps à comprendre comment il fonctionne smile.

Hors ligne

 

#3 18-12-2014 16:08:55

Seryus
Membre
Date d'inscription: 17-02-2012
Messages: 128

Re: [ZF2.3]Upload de fichier

Là est le problème, l'extension du fichier temporaire c'est .tmp, et c'est pour ça que mon code ne fonctionne pas. Je ne veux pas l'extension du fichier temporaire, mais l'extension du fichier uploadé (.png).
Si j'utilise les fonctions natives de PHP, ça me retourne le même résultat :

Code:

[lang=php]
pathinfo('./data/upload/'. $form->get('fieldset')->get('field')->getValue()['tmp_name'], PATHINFO_EXTENSION); // retourne tmp

Edit :

Bon, finalement j'ai réussi à récupérer l'extension du fichier, la fonction pathinfo ne regarde pas vraiment l'extension du fichier, elle fait un découpage de la chaîne :

Code:

[lang=php]
pathinfo($form->get('fieldset')->get('field')->getValue()['name'], PATHINFO_EXTENSION);

Dernière modification par Seryus (18-12-2014 16:20:10)

Hors ligne

 

#4 18-12-2014 16:48:16

Seryus
Membre
Date d'inscription: 17-02-2012
Messages: 128

Re: [ZF2.3]Upload de fichier

Bon en faite, je viens de remarquer quelque chose, comme j'ai passé mon entité Doctrine à mon formulaire, il ne semble pas valider les champs qui ne sont pas dans l'entité (là par exemple il ne valide pas mon image, je peux lui faire uploader ce que je veux !).
Il y a une astuce ? Ou je dois créer un InputFilter qui validera mon fichier après la validation du formulaire ?

Hors ligne

 

#5 18-12-2014 18:30:16

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: [ZF2.3]Upload de fichier

Il n'y a aucun rapport entre la validation d'un formulaire et une entité Doctrine. Normalement t'es censé être cohérent mais c'est tout. Logiquement tu dois avoir un fieldset qui représente ton entité Doctrine et dans ton formulaire tu dois avoir un input file. Ton fieldset à son InputFilter et ton formulaire aussi. Pour valider ton formulaire il faudra valider tous les fieldsets (donc dans ton cas celui de ton entité) et l'input file si tu l'as fait correctement.

Hors ligne

 

#6 19-12-2014 11:22:01

Seryus
Membre
Date d'inscription: 17-02-2012
Messages: 128

Re: [ZF2.3]Upload de fichier

Je ne sais pas si c'est vraiment pertinent, mais là mon champ InputFile est à l'intérieur du Fieldset de mon entité. Peut-être que je devrais le mettre directement dans mon formulaire ?

Hors ligne

 

#7 19-12-2014 15:45:12

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: [ZF2.3]Upload de fichier

Oui c'est ça il n'a rien à voir avec ton entité donc rien à faire dans ton fieldset wink.

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