【问题标题】:Symfony2: Form throws "Argument 1 passed to Doctrine\Common\Collections\ArrayCollection::__construct() must be an array, object given" on submitSymfony2:表单在提交时抛出“传递给 Doctrine\Common\Collections\ArrayCollection::__construct() 的参数必须是一个数组,给定对象”
【发布时间】:2014-02-09 16:19:51
【问题描述】:

我在我的一个项目中使用 FOSUserBundle。

我已经构建了一个基于对象 Employee 的表单(它与 RoleGroup 有很多)。

这是表格(部分):

$builder->add('groups', 'entity', array(
    'class' => 'MMAAuthBundle:RoleGroup',
    'choices' => $this->groups,
    'property' => 'name',
    'label' => 'Groups',
    'expanded' => true,
    'attr' => array("multiple" => true)
));

当我提交表单时,我在 Profiler 中收到此错误:

    at ErrorHandler ->handle ('4096', 'Argument 1 passed to Doctrine\Common\Collections\ArrayCollection::__construct() must be an array, object given, called in /home/mihai/intranet/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php on line 528 and defined', '/home/mihai/intranet/vendor/doctrine/collections/lib/Doctrine/Common/Collections/ArrayCollection.php', '47', array()) 
in /home/mihai/intranet/vendor/doctrine/collections/lib/Doctrine/Common/Collections/ArrayCollection.php at line 47

如何使表单返回ArrayCollection,而不是RoleGroup 对象?

我之前确实遇到过this 问题,但现在我被困在这里了。

【问题讨论】:

    标签: forms symfony fosuserbundle


    【解决方案1】:

    您的表单当前不是多表单,因此将单个RoleGroup 对象而不是RoleGroup 对象数组传递给Collection 的构造函数。

    multiple 是一个 form-option ...而不是 HTML 属性。因此...

    $builder->add('groups', 'entity', array(
    // This would only render a multiple="true" inside the fields HTML tag
    'attr' => array("multiple" => true)
    

    ...应该是...

    $builder->add('groups', 'entity', array(
    // multiple option not wrapped by attribute is correct
    "multiple" => true
    

    【讨论】:

      猜你喜欢
      • 2021-07-20
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      • 2019-03-04
      • 1970-01-01
      相关资源
      最近更新 更多