La Ferme du web - Les forums

Venez baraguiner avec la communauté !

Vous n'êtes pas identifié.

#1 11/02/2013 22:45:03

D4V1D
Membre
Date d'inscription: 03/02/2013
Messages: 3

form imbriqué 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:

<?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:

<?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:

<?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:

<?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:

<?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:

<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>

Hors ligne

 

11/02/2013 22:45:03

Botte De Foin Publicitaire


#2 13/02/2013 23:53:18

D4V1D
Membre
Date d'inscription: 03/02/2013
Messages: 3

Re: form imbriqué et/ou doctrine

pas d'idée :-(

Hors ligne

 

Pied de page des forums

Powered by FluxBB
© Copyright 2008-2009 - LaFermeduWeb.net