symfony 2.8:为 foreach() 提供的参数无效 Constraints/FormValidator

symfony 2.8: Invalid argument supplied for foreach() into Constraints/FormValidator

使用 silex 2.0 和 symfony 2.8 表单组件(不是 sf2 完整堆栈),我有一个包含多个字段的表单和一个嵌入表单。

提交表单时出现错误:

Warning: Invalid argument supplied for foreach() in vendor/symfony/form/Extension/Validator/Constraints/FormValidator.php on line 66

没有对任何字段和表单设置约束,但是,在 FormValidator.php 中,当执行 $config->getOption('constraints') 时,它 returns 一个 字段的空数组 但嵌入形式 NULL.

嵌入形式的约束也应该设置为空数组吗?如果一定要手动设置,应该在哪里设置?

代码如下:

class DebugPreviewChannelForm extends AbstractType
{
    public function __construct(FormFactoryInterface $formFactory)
    {
        $this->formFactory = $formFactory;
    }

    public function build(array $data, array $apps)
    {
          $builder = $this->formFactory->createBuilder(FormType::class, $data);

          $builder->add(
            'applicationId',
            ChoiceType::class,
            [
                'choices' => $apps,
                'label' => 'Application',
                'choices_as_values' => true,
            ]
         )
         ->add('user', UserType::class);

         return $builder->getForm();
    }
}

class UserType extends FormType implements DataMapperInterface
{
   public function buildForm(FormBuilderInterface $builder, array $options)
   {
        $builder
            ->setCompound(true)
            ->setDataMapper($this)
            ->add(
                'hash',
                TextType::class,
                ['required' => false]
            );
    }
}

如果我删除 ->add('user', UserType::class),它会完美运行。

我终于成功了。我刚刚更改了 userType class.

的实现

来源:http://symfony.com/doc/current/cookbook/form/inherit_data_option.html

class UserType extends \Symfony\Component\Form\AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
        ->add(
            'hash',
            TextType::class,
            ['required' => false]
        );
    }
}