2014-09-02 3 views
1

У меня возникла проблема с типом коллекции. Мои объекты:Silex Framework Collection тип формы

пользователя

use Doctrine\Common\Collections\ArrayCollection; 

/** 
    * @OneToMany(targetEntity="Comment", mappedBy="user") 
    */ 
protected $comments; 

public function __construct() { 
$this->comments= new ArrayCollection(); 
} 

Комментарий

/** 
    * @ManyToOne(targetEntity="User", inversedBy="comments") 
    * @JoinColumn(name="user_id", referencedColumnName="id") 
    **/ 
protected $user; 

Formbuilder:

$form = $silex['form.factory']->createBuilder('form', $user) 
       ->add('comments', 'collection', array(
        'type' => 'text', 
        'options' => array(
         'required' => false, 
         'data_class' => 'Site\Entity\Comment' 
        ), 
       )) 
       ->getForm(); 

и возвращается ошибка:

Catchable fatal error: Object of class Site\Entity\Comment could not be converted to string in C:\XXX\vendor\twig\twig\lib\Twig\Environment.php(331) : eval()'d code on line 307 Call Stack 
+0

У вас есть '__toString()' функция на 'комментарий'? – Maerlyn

+0

Когда я добавляю __toString() его работу, но другая форма с добавлением комментариев не работает. – user3735229

+0

Можете ли вы разместить шаблон? –

ответ

1

Я думаю, что вам может быть сложно использовать поле ввода типа текста здесь, так как вам нужно поле, которое представляет собой набор сложных объектов, а не только тот, который представляет собой массив строк.

Я хотел бы предложить добавить новый тип формы для Комментарий Entity:

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 

class CommentType extends AbstractType { 

    public function buildForm(FormBuilderInterface $builder, array $options) { 
     $builder->add('text', 'text', array()); 
    } 

    public function getName() { 
     return 'comment'; 
    } 

    public function getDefaultOptions(array $options) { 
     return array(
      'data_class' => 'Site\Entity\Comment' 
     ); 
    } 
} 

Тогда в первоначальном Formbuilder, ссылаться на тип:

$form = $silex['form.factory']->createBuilder('form', $user) 
    ->add('comments', 'collection', array(
     'type' => new CommentType(), 
     'options' => array(
      'required' => false, 
      'data_class' => 'Site\Entity\Comment' 
      'allow_add' => true, 
      'allow_delete' => true 
     ), 
    )) 
    ->getForm(); 
Смежные вопросы