Php symfony 2.8:为foreach()提供的参数无效,无法进入约束/FormValidator

Php symfony 2.8:为foreach()提供的参数无效,无法进入约束/FormValidator,php,forms,symfony,constraints,embed,Php,Forms,Symfony,Constraints,Embed,使用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中,当

使用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')
时,它会为字段返回一个空数组,而为嵌入表单返回
空数组

对于嵌入表单,约束是否也应设置为空数组?如果我们必须手动设置,我应该在哪里设置

代码如下:

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