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 :

Afficher champs type Collection pré remplis [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2012
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 28
    Points : 18
    Points
    18
    Par défaut Afficher champs type Collection pré remplis
    Bonjour,

    Comment puis-je faire pour afficher des champs de type collection pré remplis ?

    Lorsque j'hydrate mon formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public function testAction($action, $id){
          (...)
    $em = $this->getDoctrine()->getManager(); //Service EntityManager
    $a = $em->getRepository('StcTestBundle:Article')->find($id);
    $form = $this->createForm(new ArticleType, $a); //CREATION FORM GENERIQUE HYDRATE
          (...)
    }
    J'obtiens l'erreur suivante :

    "The form's view data is expected to be of type scalar, array or an instance of \ArrayAccess, but is an instance of class Stc\testBundle\Entity\Article.
    You can avoid this error by setting the "data_class" option to "Stc\testBundle\Entity\Article" or
    by adding a view transformer that transforms an instance of class Stc\testBundle\Entity\Article
    to scalar, array or an instance of \ArrayAccess."
    Formulaire ArticleType
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class ArticleType extends AbstractType{
    (..)
    ->add('liens', 'collection', array('type'* => new LienType(), 'allow_add'*** => true,'allow_delete' => true))
    }
    Formulaire LienType
    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
     
    class LienType extends AbstractType{
    public function buildForm(FormBuilderInterface $builder, array $options){
    $builder
    ->add('url', 'url', array('default_protocol' => 'http', 'max_length' => 120, 'required' => true, 'label' => false, 'trim' => true))
    ->add('article','hidden')
    ;
    }
     
    public function setDefaultOptions(OptionsResolverInterface $resolver){
    $resolver->setDefaults(array('data_class' => 'Stc\TestBundle\Entity\Lien'));
    }
     
    public function getName() {
    return 'test_lien';
    }
    }
    Cdlt

  2. #2
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    avec findAll ça devrait mieux fonctionner.


    rensigne toi sur la difference entre find et findAll et tu comprendra pourquoi...

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2012
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 28
    Points : 18
    Points
    18
    Par défaut Re
    Un findAll ne règle pas le problème car j'ai une relation bidirectionnelle dans mon entité Article.
    Donc je récupére tout les liens de l'article.
    Ceci à était vérifié avec un var_dump..

    Relation bidirectionnelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /**
       * @ORM\OneToMany(targetEntity="Stc\TestBundle\Entity\Lien", mappedBy="article", cascade={"persist", "remove"})
    */
     private $liens;
    Le problème viens du formulaire "Formbuilder" car les champs input (collection) ne sont pas crées lorsqu'il sont hydraté .

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2012
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 28
    Points : 18
    Points
    18
    Par défaut Re
    Bonjour,

    J'ai résolu le problème en enlevant le champ mappé 'article' dans le formulaire LienType.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class LienType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
    	          ->add('url', 'url', array('default_protocol' => 'http', 'max_length' => 120, 'required' => true, 'label' => false, 'trim' => true))
                       //  ->add('article','hidden')
            ;
        }
    Cdlt

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

Discussions similaires

  1. Champ type de contenu non affiché dans les listes en création
    Par lflorca dans le forum Développement Sharepoint
    Réponses: 1
    Dernier message: 23/10/2012, 10h54
  2. [SQL-Server] Récupérer et afficher champ type image
    Par mymy2002 dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 25/07/2012, 11h40
  3. Afficher champ type Memo access 2003
    Par fbpdt dans le forum Modélisation
    Réponses: 0
    Dernier message: 11/01/2008, 10h36
  4. Requete sur un champ de type collection
    Par Dev_info dans le forum Hibernate
    Réponses: 4
    Dernier message: 19/10/2007, 13h03
  5. Afficher tout type d'image (gif ,png, jpg...)
    Par jfb53 dans le forum C++Builder
    Réponses: 22
    Dernier message: 20/07/2005, 14h52

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