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 :

Pré-sélectionné une valeur dans un entity choice field [2.x]


Sujet :

Symfony PHP

  1. #1
    Invité
    Invité(e)
    Par défaut Pré-sélectionné une valeur dans un entity choice field
    Chers amis développeurs,

    J'essaye actuellement de développer un formulaire d'édition avec l'aide de Symfony.
    Pour ce faire, je sélectionne mon objet dans ma base grâce a Doctrine, puis je génère mon formulaire à partir de cet objet.
    Sauf que j'ai un champ entity dans mon formulaire et que ça bloque à ce niveau là dans mon objet.
    J'obtiens le message suivant "

    Expected argument of type "object", "string" given".
    Je pense que c'est parce que mon champ catégorie doit être un objet, mais je ne vois pas comment résoudre le problème.
    Pour résumer, je souhaite pré-remplir les champ de ce formulaire avec les données de l'article sélectionné en base.
    Voici la partie du code de mon controller qui charge les données de l'objet sélectionné dans le formulaire :
    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
     
    if ($request->getMethod() == 'POST') {
     
    			$form->bindRequest($request);
    			$articleId = $_POST['form']['Title'];
     
    			$em = $this->getDoctrine()->getEntityManager();
    			$article = $em->getRepository('JBBlogBundle:Articles')->find($articleId);			
     
    		$form = $this->createFormBuilder($article, array('label'=>'Update an article.'))
    		->add('Title', 'text', array('label'=>'Title : '))
    		->add('Content', 'textarea', array('label'=>'Content : '))
    		->add('Author', 'text', array('label'=>'Author : '))
    		->add('Category', 'entity', array(
        	'class' => 'JB\BlogBundle\Entity\ArticlesCategories', 'property'=>'name', 'label'=>'Category : '))
    		->add('Keywords', 'text', array('label'=>'Keywords : '))
    		->getForm();
     
    		return $this->render('JBBlogBundle:Admin_Articles:CreateArticle.html.twig', array('form'=>$form->createView(), 'notification'=>''));
    		}
    J'ai bien éssayé en créant un objet articleCategory et l'insérant dans mon objet article mais là j'obtiens le message suivant "Entities passed to the choice field must be managed"

    Je suis tombé la dessus pendant mes recherches :
    http://forum.symfony-project.org/vie...p?f=23&t=35678
    http://forum.symfony-project.org/vie...p?f=23&t=35709

    J'ai aussi entendu parler de la méthode "merge" de la classe Entity dans Doctrine :

    merge
    public object merge(object entity)

    Merges the state of a detached entity into the persistence context of this EntityManager and returns the managed copy of the entity. The entity passed to merge will not become associated/managed with this EntityManager.
    Parameters:
    entity - The detached entity to merge into the persistence context.
    Returns:
    The managed copy of the entity.
    Si jamais ça peut mettre l'un de vous sur la piste !


    Merci de votre aide.

    Cordialement,

    BENOIT Julien.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bon je pense que j'ai trouvé la solution à mon problème, la voilà et elle est très simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    			$articleCategory = $em->getRepository('JBBlogBundle:ArticlesCategories')->findOneByName($article->getCategory());			
    			$article->setCategory($articleCategory);
    J'ai tout simplement utiliser la méthode findOneByName pour obtenir mon entité articleCategory je l'ai ensuite injecter dans mon entité article grâce à un setter.

    Voilà le code de mon controller avec le bout de code ci dessus en plus :
    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
     
     
    			$form->bindRequest($request);
    			$articleId = $_POST['form']['Title'];
     
    			$em = $this->getDoctrine()->getEntityManager();
    			$article = $em->getRepository('JBBlogBundle:Articles')->find($articleId);
    			$articleCategory = $em->getRepository('JBBlogBundle:ArticlesCategories')->findOneByName($article->getCategory());			
    			$article->setCategory($articleCategory);
     
    		$form = $this->createFormBuilder($article, array('label'=>'Update an article.'))
    		->add('Title', 'text', array('label'=>'Title : '))
    		->add('Content', 'textarea', array('label'=>'Content : '))
    		->add('Author', 'text', array('label'=>'Author : '))
    		->add('Category', 'entity', array(
        	'class' => 'JB\BlogBundle\Entity\ArticlesCategories', 'property'=>'name', 'label'=>'Category : '))
    		->add('Keywords', 'text', array('label'=>'Keywords : '))
    		->getForm();
     
    		return $this->render('JBBlogBundle:Admin_Articles:CreateArticle.html.twig', array('form'=>$form->createView(), 'notification'=>''));
    Comparez le avec celui de mon post précédent pour mieux comprendre.

    ++
    JBENOIT.

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

Discussions similaires

  1. macro pour sélectionner une valeur dans un TDC
    Par sebogoss dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 19/11/2009, 14h50
  2. Réponses: 7
    Dernier message: 27/05/2008, 13h59
  3. Réponses: 7
    Dernier message: 21/03/2007, 16h07
  4. [langage] Sélectionner une valeur dans une balise
    Par Melvine dans le forum Langage
    Réponses: 2
    Dernier message: 17/11/2006, 17h57
  5. Sélectionner une valeur dans un RxDBLookupCombo
    Par Oluha dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/09/2005, 09h10

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