【问题标题】:Selectbox > get values from other class (symfony2)选择框 > 从其他类(symfony2)获取值
【发布时间】:2015-10-01 13:05:26
【问题描述】:

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

所以我的问题是:如何获得要发布的正确值? (用户的 ID,而不是对象)。

这可能是一个非常愚蠢的问题,但我是 Symfony 的新手,所以请温柔:-)

谢谢。

乔纳森

【问题讨论】:

  • 你能添加你的用户实体吗?也许你错过了映射

标签: php forms symfony entity builder


【解决方案1】:

我不认为这是一个表单字段错误,可能entity 字段正在获取正确的用户对象(它应该是),但是您在其他地方将该值用作字符串。检查您的操作或服务(如果您正在调用它们),或者更好地查看错误返回的堆栈跟踪(分析器或默认异常页面可以显示它)

【讨论】:

    【解决方案2】:

    您为其创建表单的对象很可能没有与实体/用户的关系映射,在这种情况下,错误是有意义的。如果您修复映射,则保存将正常工作。在数据库中,只有 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 2020-03-12
      • 2019-07-30
      • 1970-01-01
      • 1970-01-01
      • 2018-01-06
      相关资源
      最近更新 更多