选择框>从其他类中获取值(symfony2)

时间:2015-10-01 13:05:27

标签: php forms symfony entity builder

我是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

2 个答案:

答案 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