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 :

Comment rendre un formulaire imbriqué optionnel ?


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 33
    Par défaut Comment rendre un formulaire imbriqué optionnel ?
    Bonjour,

    Voici mon entité catégorie :
    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
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
     private $id;
    /**
     * @var string $titre
     *
     * @ORM\Column(name="titre", type="string", length=255)
     */
     private $titre;
    /**
     * @ORM\ManyToOne(targetEntity="App\AppBundle\Entity\Media", cascade={"persist"})
     * @ORM\JoinColumn(name="picto_id", referencedColumnName="id")
     */
     private $picto;
    Mon formulaire d'édition de catégorie est comme celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('titre')
            ->add('picto', new MediaType(), array('required' => false))
        ;
    }
    Mon formulaire média est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('file', 'file', array('required' => true))
        ;
    }
    Mon problème est que lorsque je valide mon formulaire sans renseigner de picto, j'ai l'erreur suivante :
    SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'fichier' cannot be null

    C'est à dire que mon formulaire de catégorie traite quand même mon formulaire de média.

    N'y a t'il donc pas moyen de rendre ce formulaire de média optionnel et qu'il ne soit pas traiter lorsque celui-ci n'est pas renseigner ?

    Merci de votre aide

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 135
    Par défaut
    Ta colonne fichier représente quoi? le path?
    sinon si tu veux pas qu'il te retourne cette erreur il faut que tu rajoute ceci dans ton entity :
    comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @ORM\Column(name="fichier", type="string", 
    length=150,nullable=true)

  3. #3
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 33
    Par défaut
    Oui je sais, mais je n'ai pas envie d'insérer des médias dont le path est null.
    Il faudrait que la propriété picto soit null dans mon entité catégorie

    Ma colonne fichier me retourne mon path.

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 135
    Par défaut
    Sinon niveau controleur dans foreach tu test si le path est null et si c'est le cas tu le remove...

    genre si c'est un formulaire imbriqué:

    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
     
    if ( $request->getMethod() == 'POST' ) {
    			$form->bindRequest($request);
     
    			if ($form->isValid() ) {
    			foreach($user->getTableauImg as $img)
                              {
                                       if ($img->getPath() != null)
                                            $img->upload()
                                       else
                                           $user->getTableauImg->removeElement($img);
                              }
     
    			}
    		}

  5. #5
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 33
    Par défaut
    Oui c'est une solution mais celle-ci ne me convient pas trop car j'aurai plusieurs formulaires qui intégreront le formulaire de média, il faudra donc copier ce bout de code à plusieurs endroits.
    Aussi, je ne pense pas que ce soit au niveau du controller qu'il fasse faire une re-validation du formulaire. je pense plutôt que cela doit se faire pendant la validation du formulaire mais je ne sais pas où.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 135
    Par défaut
    Bah si tu fais un enregistrement par ajax tu test si le champ est vide ou non... et tu le supprimes.

Discussions similaires

  1. Comment rendre mon formulaire plus performant
    Par pierrot10 dans le forum jQuery
    Réponses: 2
    Dernier message: 12/06/2013, 20h31
  2. Réponses: 4
    Dernier message: 10/08/2010, 23h40
  3. Réponses: 4
    Dernier message: 19/02/2008, 16h35
  4. Comment rendre visible des formulaires invisibles ?
    Par Taiyaki dans le forum Access
    Réponses: 3
    Dernier message: 14/12/2006, 11h21
  5. Réponses: 3
    Dernier message: 17/06/2006, 14h46

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