Я новичок в 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, поэтому, пожалуйста, будьте осторожны 🙂
Благодарю.
Джонатан
Я не думаю, что это ошибка поля формы, вероятно, entity
Поле получает правильный пользовательский объект (он должен быть), но вы используете это значение в виде строки где-то еще. Проверьте свои действия или службы (если вы их вызываете) или лучше посмотрите на трассировку стека, возвращенную ошибкой (ее может отобразить профилировщик или страница исключений по умолчанию)
Вполне вероятно, что объект, для которого вы создаете форму, не имеет сопоставления отношений с сущностью / пользователем, и в этом случае ошибка имеет смысл. Если вы исправите сопоставление, сохранение будет работать нормально. В базе данных будет сохранен только идентификатор, но это будет внешний ключ пользователя. Что-то вроде:
/**
* @ORM\ManyToOne(targetEntity="User")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $user;
Или, если у вас есть серьезные причины для сохранения только идентификатора объекта, вы должны использовать преобразователи данных, чтобы сохранить только определенную часть информации (идентификатор в вашем случае), а не объект.
Увидеть: http://symfony.com/doc/current/cookbook/form/data_transformers.html