Вывести форму с постом и возможностью выбрать автора(Symfony3)


Статья написана для себя, "что бы не забыть". 

Также я пропускаю этап генерации бандла.

Поэтому просьба строго не судить, но буду рад если кому-нибудь пригодится. 

Допустим есть 2 сущности, Post и Author.

Post:

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

   
/**
    * @var string
    *
    * @ORM\Column(name="Title", type="string", length=255)
    */
   private $title;

   
/**
    * @var string
    * @Assert\Length(
    *      min = 10,
    *      minMessage = "You must be at least {{ limit }}cm tall to enter",
    * )
    * @ORM\Column(name="Content", type="text", nullable=false)
    */
   private $content;

   
/**
    * @var \DateTime
    *
    * @ORM\Column(name="Date", type="datetime")
    */
   private $date;

   
/**
    * authorId
    * @ORM\ManyToOne(targetEntity="Jagupov\TestBundle\Entity\Author")
    * @ORM\JoinColumns({
    *     @ORM\JoinColumn(name="author_id", referencedColumnName="id")
    * })
    */
   private $author;


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

   
/**
    * Set title
    *
    * @param string $title
    *
    * @return Post
    */
   public function setTitle($title)
   {
       $this->title = $title;

       return $this;
   }

Author:

/**
* Author
*
* @ORM\Table(name="author")
* @ORM\Entity(repositoryClass="Jagupov\TestBundle\Repository\AuthorRepository")
*/
class Author
{
   
/**
    * @var int
    *
    * @ORM\Column(name="id", type="integer")
    * @ORM\Id
    * @ORM\GeneratedValue(strategy="AUTO")
    */
   private $id;

   
/**
    * @var string
    *
    * @ORM\Column(name="Name", type="string", length=255)
    */
   private $name;


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

   
/**
    * Set name
    *
    * @param string $name
    *
    * @return Author
    */
   public function setName($name)
   {
       $this->name = $name;

       return $this;
   }

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

Далее генерируем форму при помощи консоли symfony. 

class PostType extends AbstractType
{
   
/**
    * {@inheritdoc}
    */
   public function buildForm(FormBuilderInterface $builder, array $options)
   {
       $builder->add('title')
           ->add('content')
           ->add('date')
           ->add('author', EntityType::
class,[
               'class' => 'JagupovTestBundle:Author',
               'label' => 'Author name',
           ])
           ->add('submit', SubmitType::
class);
   }
   
   
/**
    * {@inheritdoc}
    */
   public function configureOptions(OptionsResolver $resolver)
   {
       $resolver->setDefaults(array(
           'data_class' => 'Jagupov\TestBundle\Entity\Post'
       ));
   }

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

Далее если попытаться отобразить эту форму выскачет ошибка.

 Catchable Fatal Error: Object of class Jagupov\TestBundle\Entity\Author could not be converted to string

Для того что бы от нее избавиться нужно в сущность Author добавить метод:

 public function __toString()
{
    return static::getName();
}

Собственно создал этот пост потому, что дважды наткнулся на эту ошибку. 


Comments 4


Приветствую Вас и желаю успехов на платформе Голос!

В этой статье вы сможете найти ответы на большинство вопросов, возникающих у новичков. Также большую подборку ссылок на полезные материалы вы можете найти по этой ссылке
Оперативно получить помощь, вы можете присоединившись к нашему сообществу в Телеграм

Буду признателен, если расскажете, откуда Вы узнали о платформе Голос (ответьте цифрой):
1) увидел в Facebook
2) увидел в ВКонтакте
3) из поиска Google
4) из поиска Яндекс
5) из Steem
6) рассказал друг
7) другое (укажите в комментарии)

Чтобы быстрей освоится, присоединяйтесь к конкурсу для новичков, который идёт прямо сейчас!

10.09.2017 19:00
0