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 :

Problème upload image quand le fichier n'est pas spécifié [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Profil pro
    ceo
    Inscrit en
    Août 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ceo

    Informations forums :
    Inscription : Août 2005
    Messages : 62
    Points : 48
    Points
    48
    Par défaut Problème upload image quand le fichier n'est pas spécifié
    Bonjour,

    je suis en train de faire un formulaire qui permet d'ajouter un événement. Dedans j'ai une fonction d'upload d'image, que j'aimerais facultative, le pb est que quand je ne spécifie pas de fichier image j'ai l'erreur suivante (tout marche bien si je spécifie un fichier image) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    An exception occurred while executing 'INSERT INTO Image (extension, alt) VALUES (?, ?)' with params [null, null]:
     
    SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'extension' cannot be null
    Pourtant dans ma classe Image j'ai bien 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
    15
    16
    17
    18
    19
    20
    21
    22
    /**
     * @ORM\Table()
     * @ORM\Entity(repositoryClass="Bit\EventsBundle\Entity\ImageRepository")
     * @ORM\HasLifecycleCallbacks()
    */
    class Image
    {
    //...
      /**
       * @ORM\PrePersist()
       * @ORM\PreUpdate()
       */
      public function preUpload()
      {
      {
        if (null === $this->file) 
       {
            echo 'upload';
            return;
        }
    //...
    }
    (J'ai bien le upload du echo qui s'affiche et qui ne s'affiche pas si j'enlève le Haslifecyclecallbacks.)

    Et j'ai cette relation avec la classe Image dans la classe Event :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        /**
        * @ORM\OneToOne(targetEntity="Bit\EventsBundle\Entity\Image", cascade={"persist", "remove"})
        */
        private $image;
    Vu qu'elle n'a pas l'option nullable="false" je ne vois pas pourquoi ça ne fonctionne pas.
    J'ai l'impression que ça vient du EventController, ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                if ($form->isValid())
                {
                    $em = $this->getDoctrine()->getManager();
                    $em->persist($event);
                    $em->flush();
    Car il va persister en cascade l'image qui a ses attributs qui ne sont pas hydratés mais je ne vois pas ce qu'il faut changer pour ne pas lié d'image à l'évènement quand il n'y en a pas.

    Je bloque vraiment depuis longtemps là dessus, je serais vraiment content si quelqu'un pouvait m'aider!
    Merci d'avance!

  2. #2
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Hello,

    "nullable = false" est la valeur par défaut.
    C'est pour cette raison que tu dois rajouter "nullable = true" dans ton annotation.

  3. #3
    Membre du Club
    Profil pro
    ceo
    Inscrit en
    Août 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ceo

    Informations forums :
    Inscription : Août 2005
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    Merci de ta réponse.

    Il me semblait avoir lu le contraire justement, que nullable était par défaut à true, donc c'est un des seuls trucs que je n'avais pas vérifié, malheureusement en ayant modifié comme ceci ma classe Event:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        /**
        * @ORM\OneToOne(targetEntity="Bit\EventsBundle\Entity\Image", cascade={"persist", "remove"})
        * @ORM\JoinColumn(nullable=true)
        */
        private $image;
    j'ai toujours le même message d'erreur...

  4. #4
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Il faut mettre à jour ta base de données maintenant

  5. #5
    Membre du Club
    Profil pro
    ceo
    Inscrit en
    Août 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ceo

    Informations forums :
    Inscription : Août 2005
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    Ahah, j'aurais carrément pu oublier de le faire, mais pas cette fois...

    Edit : en fait j'ai l'impression que le problème vient bien d'une mauvais MAJ de la BDD.

    Parce que quand je met cette annotation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       /**
        * @ORM\OneToOne(targetEntity="Bit\EventsBundle\Entity\Image", cascade={"persist", "remove"})
        * @ORM\JoinColumn(nullable=false)
        */
        private $image;
    j'ai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    C:\wamp\www\Symfony>php app/console doctrine:schema:update --dump-sql
    ALTER TABLE event CHANGE image_id image_id INT NOT NULL;
    Mais quand je rechange les annotations comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        /**
        * @ORM\OneToOne(targetEntity="Bit\EventsBundle\Entity\Image", cascade={"persist", "remove"})
        * @ORM\JoinColumn(nullable=true)
        */
        private $image;
    Il n'y a rien de mise à jour dans la BDD :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    C:\wamp\www\Symfony>php app/console doctrine:schema:update --dump-sql
    Nothing to update - your database is already in sync with the current entity metadata.

    Bon finalement j'ai réussi à contourner le problème en rajoutant ceci avt de persister mon event :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                    $file= $event->getImage()->getFile();
                    if ($file === null)
                    {$event->setImage();}

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

Discussions similaires

  1. [eZ Publish] Problème upload image
    Par RomJo dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 12/04/2011, 22h32
  2. [MySQL] Problème UPLOAD image
    Par makamine dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 12/04/2011, 17h41
  3. problème upload image par ftp chez 1&1
    Par boubou_s dans le forum 1&1
    Réponses: 0
    Dernier message: 01/04/2010, 18h30
  4. Réponses: 7
    Dernier message: 02/09/2008, 18h42
  5. Réponses: 18
    Dernier message: 30/06/2005, 13h30

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