Выберите & gt; получить значения из другого класса (symfony2)

Я новичок в 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

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

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

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

Вероятно, это действительно нубистский вопрос, но я новичок в Symfony, поэтому, пожалуйста, будьте осторожны 🙂

Благодарю.

Джонатан

0

Решение

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

0

Другие решения

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

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

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

Увидеть: http://symfony.com/doc/current/cookbook/form/data_transformers.html

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector