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

Symfony PHP Discussion :

Upload de fichier : bind [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 21
    Par défaut [Résolu] Upload de fichier : bind
    Bonjour.

    Je tente d'effectuer un upload de fichier simple avec Symfony... et j'ai quelques soucis.

    Voici le schéma yml correspondant aux Labels (les marques) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Label:
      columns: 
        name: { type: string(125), notnull: true, unique: true }
        description: { type: string(125) }
        logo: { type: string(255) }
    J'ai généré le module labels à partir du modèle Label, j'ai donc bien un formulaire lorsque j'ajoute ou édite une marque.

    J'ai configuré mon formulaire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class LabelForm extends BaseLabelForm
    {
    	public function configure(){
    		$this->widgetSchema['logo'] = new sfWidgetFormInputFile(array(
    			'label'=>'Logo de la marque'
    		));
     
    		$this->validatorSchema['logo'] = new sfValidatorFile(array(
    			'required'		=> false,
    			'path'			=> sfConfig::get('sf_upload_dir').'/labels',
    			'mime_types'	=> 'web_images',
    		));
    	}
    }
    J'avais bien l'input de type file qui s'affichait, mais lorsque je tentais de soumettre le tout j'obtenais un message d'erreur :
    This form is multipart, which means you need to supply a files array as the bind() method second argument.
    Dans la classe action.class.php j'ai donc modifié ma méthode processForm de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    protected function processForm(sfWebRequest $request, sfForm $form)
    {
     $form->bind($request->getParameter($form->getName()), $request->getFiles('logo'));
     
     //$form->bind($request->getParameter($form->getName()));
     if ($form->isValid())
     {
       $label = $form->save();
     
       $this->redirect('labels/edit?id='.$label->getId());
     }
    }
    C'est à dire que j'ai ajouté un deuxième paramètre à bind. Et là, lorsque je soumets le formulaire, la marque est bien créée ou éditée, mais aucun upload ne s'effectue malgré que l'input file soit renseigné...

    Je ne comprends pas... pourtant c'est bien "logo" que je doit mettre en paramètre de getFiles, puisque lorsque j'affiche le code source de mon formulaire j'obtiens ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <tr>
      <th><label for="label_logo">Logo de la marque</label></th>
      <td><input type="file" name="label[logo]" id="label_logo" />
    Si quelqu'un avait une piste...

    Merci d'avance

  2. #2
    Membre chevronné
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Par défaut
    bonjour,

    as-tu précisé dans ta vue que le formulaire est multipart ?

    pour traiter le fichier reçu :
    http://www.symfony-project.org/book/...ng_the_request

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 21
    Par défaut
    Salut, et merci de ta réponse.

    Il est forcément précisé que mon formulaire est multipart puisque j'ai eu le message d'erreur que j'ai cité, non ?
    This form is multipart, which means you need to supply a files array as the bind() method second argument.
    De plus lorsque je vais dans le code source :
    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
    <?php include_stylesheets_for_form($form) ?>
    <?php include_javascripts_for_form($form) ?>
     
    <form action="<?php echo url_for('labels/'.($form->getObject()->isNew() ? 'create' : 'update').(!$form->getObject()->isNew() ? '?id='.$form->getObject()->getId() : '')) ?>" method="post" <?php $form->isMultipart() and print 'enctype="multipart/form-data" ' ?>>
    <?php if (!$form->getObject()->isNew()): ?>
    <input type="hidden" name="sf_method" value="put" />
    <?php endif; ?>
      <table>
        <tfoot>
          <tr>
            <td colspan="2">
              &nbsp;<a href="<?php echo url_for('labels/index') ?>">Cancel</a>
              <?php if (!$form->getObject()->isNew()): ?>
                &nbsp;<?php echo link_to('Delete', 'labels/delete?id='.$form->getObject()->getId(), array('method' => 'delete', 'confirm' => 'Are you sure?')) ?>
              <?php endif; ?>
              <input type="submit" value="Save" />
            </td>
          </tr>
        </tfoot>
        <tbody>
          <?php echo $form ?>
        </tbody>
      </table>
    </form>
    Le fichier reçu n'est pas traité automatiquement avec le validatorSchema ? Dans tous les tutos que j'ai pu lire et dans celui de Jobeet ils disent qu'il n'y a rien d'autre à faire...

  4. #4
    Membre chevronné
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Par défaut
    personnellement, je ne me fis pas aux tutoriels annexes comme Jobeet. je préfère regarder LE book en anglais et trouver exactement ce que je cherche.

    concernant ton erreur, je pense que tu n'est tout simplement pas allé au bout du de cette partie du tutoriel comme on peut le lire sur ce forum. quand penses-tu ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 21
    Par défaut
    Salut.

    La réponse était en fait que ce n'était pas "logo" qu'il fallait mettre, mais "label" le nom du module.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $form->bind($request->getParameter($form->getName()), $request->getFiles('label'));
    Ce n'était pas très clair dans les différents tutos que j'ai pu lire.

    Merci pour ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FTP] Problème pour uploader un fichier
    Par Crazyblinkgirl dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 07/01/2008, 22h21
  2. Upload de fichier par XMLHTTP
    Par Immobilis dans le forum ASP
    Réponses: 6
    Dernier message: 21/01/2005, 17h02
  3. upload de fichier
    Par 120 dans le forum ASP
    Réponses: 16
    Dernier message: 21/06/2004, 12h07
  4. Upload de fichiers sur un ftp
    Par Crazyblinkgirl dans le forum ASP
    Réponses: 10
    Dernier message: 20/06/2004, 11h55
  5. Upload de fichiers
    Par GDVL dans le forum ASP
    Réponses: 4
    Dernier message: 03/06/2004, 12h44

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