Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Le présent code permet de faire une liaison ManytoOne entre l'entité Post et Param_categorie. Ici un post est lié à une catégorie et dans le formulaire ou PostType il y a un EntityType lié à Param_categorie.

///******PostType*****/

<?php

namespace AppBundle\Form;

use AppBundle\Repository\Param_categorieRepository;
use Doctrine\ORM\EntityRepository;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class PostType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('title',TextareaType::class)
                ->add('online',ChoiceType::class, array(
                            'choices'  => array(
                                'Choisir...' => true,
                                'Oui' => 'Oui',
                                'Non' => 'Non',
                            ),
                        ))
                ->add('categorie',EntityType::class, array(
                    'class' => 'AppBundle\Entity\Param_categorie',
                    'choice_label' => 'Catégorie',
                    'placeholder' => 'Choisir ...',
                    'required' => true,
                    'query_builder' => function(EntityRepository $er) {
                        return $er->createQueryBuilder('c')
                            ->orderBy('c.designation', 'ASC');
                    },
                ))
                ->add('file', FileType::class, array(
                        'label' => 'Fichier(PDF)',
                        'data_class' => null)
                );
    }/**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\Post'
        ));
    }

    /**
     * {@inheritdoc}
     */
    public function getBlockPrefix()
    {
        return 'appbundle_post';
    }

}

///********* Post**************////
<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Post
 *
 * @ORM\Table(name="post")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\PostRepository")
 */
class Post
{
      /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="Param_categorie", inversedBy="post")
     * @ORM\JoinColumn(name="category",referencedColumnName="designation")
     */
    private $category;

    /**
     * Get id
     *
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set category
     *
     * @param Param_categorie $category
     *
     * @return Post
     */
    public function setCategory(Param_categorie $category)
    {
        $this->category = $category;

        return $this;
    }

    /**
     * Get category
     *
     * @return \AppBundle\Entity\Param_categorie
     */
    public function getCategory()
    {
        return $this->category;
    }
}

/////////////*********Param_categorie*********//////
<?php

namespace AppBundle\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;

/**
 * Param_categorie
 *
 * @ORM\Table(name="param_categorie")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\Param_categorieRepository")
 */
class Param_categorie
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="designation", type="string", length=45, unique=true)
     */
    private $designation;

    /**
     * @ORM\OneToMany(targetEntity="Post", mappedBy="category")
     */
    private $post;

    /**
     * Get id
     *
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set designation
     *
     * @param string $designation
     *
     * @return Param_categorie
     */
    public function setDesignation($designation)
    {
        $this->designation = $designation;

        return $this;
    }

    /**
     * Get designation
     *
     * @return string
     */
    public function getDesignation()
    {
        return $this->designation;
    }

    public function __toString()
    {
        return $this->getDesignation();
    }

    /**
     * Param_categorie constructor.
     */
    public function __construct()
    {
        $this->post = new ArrayCollection();
    }

    /**
     * Add post
     *
     * @param Post $post
     *
     * @return Param_categorie
     */
    public function addPost(Post $post)
    {
        $this->post[] = $post;

        return $this;
    }

    /**
     * Remove post
     *
     * @param \AppBundle\Entity\Post $post
     */
    public function removePost(\AppBundle\Entity\Post $post)
    {
        $this->post->removeElement($post);
    }

    /**
     * Get post
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getPost()
    {
        return $this->post;
    }
}

Ce que je veux

Je veux afficher la liste des catégories dans une combolist. En passant quand je supprime toutes les catégories le formulaire s'affiche sans problème. Et dans le cas contraire, j'ai l'erreur suivante:

Ce que j'obtiens

Neither the property "categorie" nor one of the methods "getCategorie()", "categorie()", "isCategorie()", "hasCategorie()", "__get()" exist and have public access in class "AppBundle\Entity\Post".

3 réponses


Salut !

Peux tu mettre ton code dans la balise code prévu à cet effet stp ? Ça nous arrangerait pour mieux lire, merci.

JeremyB, une merci pour ta remarque qui m'a permi de reprendre la mise en forme!

Bonjour André Michel,

Dans ton buildform, tu as ajouté un champ categorie, alors que dans ton entité c'est la colonne category.

Bonne continuation :)