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 :

Formulaires imbriqués et/ou Doctrine


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Par défaut Formulaires imbriqués et/ou Doctrine
    Bonjour,
    J’ai un sérieux problème de compréhension sur les formulaires imbriqués et/ou doctrine.

    En gros, j’ai :
    - Une classe categories qui liste l’intégralité des catégories de mon site
    - Une classe wantads qui permet de créer un texte d’annoncé (lié à une et une seule catégorie)

    Mon objectif est d’afficher un formulaire avec ces toutes les informations du wantads + la liste des categories. L’internaute remplie le formulaire, sélection une catégorie et op tout s’inscrit en base.
    Mon problème est sur ce dernier point, le message d’erreur est :
    “Catchable Fatal Error: Object of class Acme\WantadsBundle\Entity\Categories could not be converted to string in C:\developpement\sfprojects\Symfony\vendor\doctrine\dbal\lib\Doctrine\DBAL\Statement.php line 103”

    Merci d’avance pour votre aide ;-)

    Ci-dessous les différents fichiers (simplifiés)

    Classe « categories »

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    <?php
    namespace Acme\WantadsBundle\Entity;
    use Doctrine\ORM\Mapping as ORM;
    /**
     * Categories
     *
     * @ORM\Table(name="categories")
     * @ORM\Entity
     */
    class Categories
    {
        /**
         * @var integer
         *
         * @ORM\Column(name="categories_id", type="integer", nullable=false)
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="IDENTITY")
         */
        private $categoriesId;
     
        /**
         * @var string
         *
         * @ORM\Column(name="categories_name", type="string", length=50, nullable=false)
         */
        private $categoriesName;
     
        /**
         * @var integer
         *
         * @ORM\Column(name="parents_id", type="integer", nullable=false)
         */
        private $parentsId;
     
        /**
         * Constructor
         */
        public function __construct()
        {
            $this->idAttributes = new \Doctrine\Common\Collections\ArrayCollection();
        }
     
        /**
         * Get categoriesId
         *
         * @return integer 
         */
        public function getCategoriesId()
        {
            return $this->categoriesId;
        }
     
        /**
         * Set categoriesName
         *
         * @param string $categoriesName
         * @return Categories
         */
        public function setCategoriesName($categoriesName)
        {
            $this->categoriesName = $categoriesName;
     
            return $this;
        }
     
        /**
         * Get categoriesName
         *
         * @return string 
         */
        public function getCategoriesName()
        {
            return $this->categoriesName;
        }
     
        /**
         * Set parentsId
         *
         * @param integer $parentsId
         * @return Categories
         */
        public function setParentsId($parentsId)
        {
            $this->parentsId = $parentsId;
     
            return $this;
        }
     
        /**
         * Get parentsId
         *
         * @return integer 
         */
        public function getParentsId()
        {
            return $this->parentsId;
        }
    }
    Classe « CategoriesType »

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <?php
     
    namespace Acme\WantadsBundle\Form\Type;
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolverInterface;
    use Acme\WantadsBundle\Form\Type\WantAdsType;
    use Acme\WantadsBundle\Entity\WantAds;
    use Acme\WantadsBundle\Entity\Categories;
     
    class CategoriesType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder->add('CategoriesName', 'entity', array (
                    'class' =>'AcmeWantadsBundle:Categories',
                    'property' => 'categoriesname'));
        }
     
        public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'Acme\WantadsBundle\Entity\Categories'
            ));
        }
     
        public function getName()
        {
            return 'Categories';
        }
    }
    Classe « products »

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    <?php
    namespace Acme\WantadsBundle\Entity;
    use Doctrine\ORM\Mapping as ORM;
    /**
     * WantAds
     *
     * @ORM\Table(name="want_ads")
     * @ORM\Entity
     */
    class WantAds
    {
        /**
         * @var integer
         *
         * @ORM\Column(name="id_ads", type="integer", nullable=false)
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="IDENTITY")
         */
        private $idAds;
     
        /**
         * @var string
         *
         * @ORM\Column(name="title_ads", type="string", length=90, nullable=false)
         */
        private $titleAds;
     
        /**
         * @var \Categories
         *
         * @ORM\ManyToOne(targetEntity="Categories")
         * @ORM\JoinColumns({
         *   @ORM\JoinColumn(name="categories_id", referencedColumnName="categories_id")
         * })
         */
        private $categories;
     
        /**
         * Get idAds
         *
         * @return integer 
         */
        public function getIdAds()
        {
            return $this->idAds;
        }
     
        /**
         * Set titleAds
         *
         * @param string $titleAds
         * @return WantAds
         */
        public function setTitleAds($titleAds)
        {
            $this->titleAds = $titleAds;
     
            return $this;
        }
     
        /**
         * Get titleAds
         *
         * @return string 
         */
        public function getTitleAds()
        {
            return $this->titleAds;
        }
     
        /**
         * Set categories
         *
         * @param \Acme\WantadsBundle\Entity\Categories $categories
         * @return WantAds
         */
        public function setCategories(\Acme\WantadsBundle\Entity\Categories $categories = null)
        {
            $this->categories = $categories;
     
            return $this;
        }
     
        /**
         * Get categories
         *
         * @return \Acme\WantadsBundle\Entity\Categories 
         */
        public function getCategories()
        {
            return $this->categories;
        }
    }
    Classe « Productstype » :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <?php
     
    namespace Acme\WantadsBundle\Form\Type;
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolverInterface;
    use Acme\WantadsBundle\Form\Type\WantAdsType;
    use Acme\WantadsBundle\Entity\WantAds;
     
    class WantAdsType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder->add('TitleAds')
                    ->add('Categories', new CategoriesType());
        }
     
        public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'Acme\WantadsBundle\Entity\WantAds',
                'cascade_validation' => true
            ));
        }
     
        public function getName()
        {
            return 'WantAds';
        }
    }
    Le controler :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    <?php
    namespace Acme\WantadsBundle\Controller;
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Acme\WantadsBundle\Form\Type\WantAdsType;
    use Acme\WantadsBundle\Form\Type\CategoriesType;
    use Acme\WantadsBundle\Entity\WantAds;
    use Acme\WantadsBundle\Entity\Categories;
    use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
     
    class WantadsController extends Controller
    {
        public function addAction()
        {
            $request = $this->get('request'); // On récupère l'objet request via le service container
            $wantads = new WantAds('');// On créé notre objet WantAds vierge
     
            $form = $this->createForm(new WantAdsType(), $wantads);// On bind l'objet WantAds à notre formulaire WantAdsType
     
            if ($request->isMethod('POST')) {
            $form->bind($request);
     
            //on test si le formulaire est valide par rapport aux regles de gestion des champs
            if ($form->isValid()) {                
                    //enregistrement du wantads en base
                    $em = $this->getDoctrine()->getManager();
                    $em->persist($wantads);
                    $em->persist($wantads->getCategories());
                    $em->flush();
                    return $this->render('AcmeWantadsBundle:Wantads:success.html.twig');
                    }
                else{
                    return $this->render('AcmeWantadsBundle:Wantads:error.html.twig');
                }
            }
            else{
                return $this->render('AcmeWantadsBundle:Wantads:new.html.twig', array('form' => $form->createView(),));
            }
            return $this->render('AcmeWantadsBundle:Wantads:new.html.twig', array(
                'form' => $form->createView(),
            ));
     
        }
     
        public function successAction()
        {
                    return $this->render('AcmeWantadsBundle:Wantads:success.html.twig');
        }
     
        public function errorAction()
        {
                    return $this->render('AcmeWantadsBundle:Wantads:error.html.twig');
        }
    }
    ?>
    Le new.html.twig

    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 action="{{ path('wantads_add') }}" method="post" {{ form_enctype(form) }}>
    {{ form_errors(form) }}
        <div>
            {{ form_label(form.Categories, 'Catégorie de publication : ') }}
            {{ form_errors(form.Categories) }}
            {{ form_widget(form.Categories) }}
        </div>
        <div>
            {{ form_label(form.TitleAds, 'Titre de l annonce : ') }}
            {{ form_errors(form.TitleAds) }}
            {{ form_widget(form.TitleAds) }}
        </div>
        <div>
            {{ form_label(form.TxtAds, 'Texte de l annonce : ') }}
            {{ form_errors(form.TxtAds) }}
            {{ form_widget(form.TxtAds) }}
        </div>
    {{ form_rest(form) }}
    <input type="submit" />
    </form>

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Par défaut Pas d'idée ?
    Je suis malheusement tjs bloqué.
    Quelqu'un a une piste ?
    Merci d'avance pour votre aide

Discussions similaires

  1. [XHTML] Formulaires imbriqués interdits ?
    Par Morgoth_fr dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 15/12/2006, 08h40
  2. 2 formulaires imbriqués
    Par harlock59 dans le forum Langage
    Réponses: 9
    Dernier message: 16/06/2006, 13h30
  3. 2 formulaires imbriqués
    Par Invité dans le forum Langage
    Réponses: 16
    Dernier message: 11/05/2006, 08h54
  4. formulaires imbriqués
    Par Nounoursonne dans le forum Langage
    Réponses: 34
    Dernier message: 18/11/2005, 14h18
  5. probleme deux formulaires imbriqués
    Par rony dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 21/06/2005, 18h19

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