2015-10-01 2 views
0

Я новичок в Symfony2 и задаюсь вопросом. Мне удалось создать форму и получить значения из другой таблицы в моем selectbox.Selectbox> получить значения из другого класса (symfony2)

Но когда я хочу сохранить форму, она дает ошибку.

Это мой код строителя:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('userId', 'entity', array(
      'class' => 'AppBundle:User', 
      'choice_label' => 'name', 
      'expanded' => false, 
      'multiple' => false, 
      'label' => 'Select user',       
     )) 
     ->add('title') 
     ->add('timestamp') 
     ->add('text') 
    ; 
} 

Все точно показывает, как я хочу, чтобы это показать, но когда я сохраняю я получаю эту ошибку:

Catchable Fatal Error: Object of class AppBundle\Entity\User could not be converted to string 

Который полностью делает потому что, по-видимому, форма не передает значение selectbox, но возвращает весь объект взамен.

private 'userId' => 
     object(AppBundle\Entity\User)[852] 
      ... 

Так что мой вопрос: как мне получить правильное значение для публикации? (идентификатор пользователя, а не объекта).

Это, наверное, действительно noobish вопрос, но я новичок в Symfony, поэтому, пожалуйста, быть нежным :-)

Спасибо.

Джонатан

+0

Можете ли вы добавить свой объект пользователя? Возможно, вы пропустили картографирование – Bang

ответ

0

Я не думаю, что это ошибка поля формы, вероятно, entity поля получает правильный объект пользователя (он предназначен, чтобы быть), но вы используете это значение в виде строки где-нибудь еще. Проверьте свои действия или службы (если вы их вызываете) или лучше посмотрите на стек, возвращенный ошибкой (страница с профилировщиком или по умолчанию может отобразить его)

0

Вероятно, объект, который вы создаете для не имеет сопоставления отношений с Entity/User, и в этом случае ошибка имеет смысл. Если вы зафиксируете сопоставление, сохранение будет работать нормально. В базе данных будет сохранен только идентификатор, но это будет внешний ключ пользователя. Что-то вроде:

/** 
* @ORM\ManyToOne(targetEntity="User") 
* @ORM\JoinColumn(name="user_id", referencedColumnName="id") 
*/ 
private $user; 

Или если у вас есть серьезные причины, чтобы сохранить только идентификатор объекта, который вы должны использовать трансформаторы данных, так что вы сохраните только определенную часть информации (ID в вашем случае), а не объект ,

http://symfony.com/doc/current/cookbook/form/data_transformers.html