我是Symfony2的新手并且有一个问题。我已经成功创建了一个表单并从我的selectbox中的另一个表中获取值。
但是当我想保存表单时,它会出错。
这是我的构建器代码:
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]
...
所以我的问题是:如何获得正确的值? (用户的ID,而不是对象)。
这可能是一个非常愚蠢的问题,但我是Symfony的新手,所以请保持温柔:-)
感谢。
Jonathan
答案 0 :(得分:0)
我不认为这是表单字段错误,可能entity
字段正在获取正确的用户对象(它的目的是),但您在某处将该值用作字符串其他。检查您的操作或服务(如果您正在调用它们),或者更好地查看错误返回的堆栈跟踪(分析器或默认异常页面可以显示它)
答案 1 :(得分:0)
您正在创建表单的对象可能没有与实体/用户的关系映射,在这种情况下,错误是有意义的。如果您修复了映射,则保存将正常工作。在数据库中,只保存id,但它将是User的外键。类似的东西:
/**
* @ORM\ManyToOne(targetEntity="User")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $user;
或者,如果您有充分的理由只保存对象的ID,则必须使用数据转换器,这样您只能保存某个信息(在您的情况下为ID),而不是对象。
请参阅:http://symfony.com/doc/current/cookbook/form/data_transformers.html