在属性路径“ cc”中给出的类型为“字符串或空”,“数组”的CollectionType预期参数

时间:2019-02-13 09:55:03

标签: php symfony symfony-forms symfony4

有人可以解释为什么我收到此错误吗?我是第一次使用CollectionType。已使用documentation。 这是我尝试使用CollectionType的地方:

$builder->add('cc', CollectionType::class, [
         'required' => false,
         'entry_type' => EmailType::class
])

这是我的要求:

{
    "email" => "test@test.com",
    "description" => "test description",
    "subject" => "test",
    "cc" => array:1 [
         0 => "test1@test.com"
    ]
}

2 个答案:

答案 0 :(得分:1)

我遇到了与您几乎相同的问题,但是您的确切解决方案对我不起作用,但是您让我走上了解决之路,因此给了您+1的机会。我想写这个作为评论,但是太长了。这是我必须更改您的解决方案以使其起作用的原因:

$builder->get('myCollection')
    ->addModelTransformer(new CallbackTransformer(
        function ($array) {
            return $array;
        },
        function ($array) {
            $res = array();
            foreach($array as $item) {
                if ($item === null) {
                    $item = '';
                }
                $res[] = $item;
            }

            return $res;
        }
    ));

答案 1 :(得分:0)

所以我的问题出在EmailEntitycc是字符串的地方。我已使用Data Transformers来解决此问题。刚刚添加:

$builder->get('cc')
        ->addModelTransformer(new CallbackTransformer(
            function ($array) {
                return $array;
            },
            function ($array) {
                return json_encode($array);
            }
));

别忘了添加use Symfony\Component\Form\CallbackTransformer;