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 :

ManyToMany et multiple ChoiceType


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 11
    Par défaut ManyToMany et multiple ChoiceType
    Hello,

    J'ai une relation ManyToMany entre mes entités article et tag, et j'utilise un choice type pour les afficher dans mon form (car le tagging support de la bibliothèque select2 s'applique sur les select). Ca fonctionne, sauf que je ne sais pas comment récupérer les valeurs de ce choicetype (les fonctionnalités par défaut ne persistent rien). Votre aide est bien venue Merci!

    /**
    * Article.php
    *
    * @ORM\Table(name="article")
    * @ORM\Entity(repositoryClass="AppBundle\Repository\ArticleRepository")
    */
    class Article
    {
    /**
    * @var int
    *
    * @ORM\Column(name="id", type="integer")
    * @ORM\Id
    * @ORM\GeneratedValue(strategy="AUTO")
    */
    private $id;



    /**
    * Many articles have Many tags.
    * @ORM\ManyToMany(targetEntity="Tag")
    * @ORM\JoinTable(name="article_tags",
    * joinColumns={@ORM\JoinColumn(name="article_id", referencedColumnName="id")},
    * inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")}
    * )
    */
    private $tags;
    }
    /**
    * Project Type
    *
    * @category PHP
    * @package AppBundle
    * @license http://choosealicense.com/licenses/bsd-2-clause/
    */
    class ArticleType extends AbstractType
    {
    /**
    * BuildForm
    *
    * @param FormBuilderInterface $builder form builder
    * @param array $options options
    *
    * @return void
    */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
    $builder->add(
    'tags', EntityType::class, array( // j'ai aussi essayé avec ChoiceType::class
    'label' => 'Tags',
    'multiple' => true,
    'class' => 'AppBundle:Tag',
    'choice_label' => 'name',
    'attr' => array(
    'class' => 'form-control'
    )
    ));
    }
    https://select2.github.io/examples.html#tags

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Par défaut
    bonjour,
    as tu essayé avec data transformers ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 11
    Par défaut
    Bonjour,

    Ce n'est pas d'un data transformer dont j'ai besoin : je n'ai pas de problème pour la saisie de mes données dans le formulaire, mais pour les récupérer dans le controller.

    J'ai essayé tout un tas de choses dont toutes les variantes autour de
    $form->get('tags')->getData();
    Et pourtant, les données sont bien quelques part dans le form, puisque lorsque je fais un print_r je les trouve :

    Array ( [_controller] => AppBundle\Controller\BackendController::articleNewAction [templateName] => articleNew [id] => 3 [_route] => route_update [_route_params] => Array ( [templateName] => articleNew [id] => 3 ) ) ) [request] => Symfony\Component\HttpFoundation\ParameterBag Object ( [parameters:protected] => Array ( [project] => Array ( [name] => test [tags] => Array ( [0] => 1 [1] => kkkk [2] => qozdpezfkfsd [3] => bcdcb,b ) [video] => https://player.vimeo.com/video/35981251 [description] => ....
    Votre aide est bienvenue...

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Par défaut
    ah ok, pour récupérer les donnés de la form:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $form->getData(); // contient tout les données
    $form["champ"]->getData(); // contient la valeur associé a l'input intitulé champ
    si ca marche pas , montre nous le resultat de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo '<pre>';var_dump($form->getData());echo'</pre>';exit;

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 11
    Par défaut
    Ce que tu proposais ne fonctionne pas, en revanche j'ai réussi à obtenir mes tags via /
    $data = $request->request->all();
    foreach ($data['article']['tags'] as $val) {
    echo $tag;
    }
    Cela dit c'est pas fini, question supplémentaire

    J'ai un attribut fichier dans mon entité Article :
    /**
    * @ORM\Column(type="string", nullable=true)
    *
    * @Assert\File(
    * maxSize = "1024k",
    */
    private $fichier;
    Que j'appelle ainsi dans mon form type :
    $builder->add(
    'fichier', FileType::class, array(
    'data_class' => null
    , 'required' => false
    , 'attr' => array(
    'class' => 'input-file',
    )
    )
    );
    Et dans mon controller je le gère ainsi via un service :
    if ($form->handleRequest($request)->isSubmitted()
    ) {
    $file = $article->getImage();
    if ($file != null) {
    $fileName = $this->get('app.fic_uploader')->upload($file, 0);
    $article->setFichier($fileName);

    ....
    }
    Le problème c'est que si aucun fichier n'est inséré, il écrase l'ancien lien vers le fichier en base et remplace par null. Il faudrait qu'il ne remplace pas la valeur de l'entité dans le cas ou le champ du formulaire est null. Savez-vous comment je peux faire ça ? Ou s'il y a un moyen plus "propre" de le gérer je suis partant aussi.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 11
    Par défaut
    any help ?

Discussions similaires

  1. [2.x] [Form] ManyToMany, multiple true
    Par Trezegoals dans le forum Symfony
    Réponses: 0
    Dernier message: 19/03/2013, 11h03
  2. Réponses: 87
    Dernier message: 06/07/2011, 15h33
  3. formulaire choix multiple
    Par pram dans le forum XMLRAD
    Réponses: 6
    Dernier message: 02/02/2003, 18h59
  4. Création multiple table paradox dans le code
    Par scarabee dans le forum C++Builder
    Réponses: 8
    Dernier message: 30/10/2002, 10h17
  5. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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