【问题标题】:symfony 2.8: Invalid argument supplied for foreach() into Constraints/FormValidatorsymfony 2.8:为 foreach() 提供的参数无效到 Constraints/FormValidator
【发布时间】:2015-12-23 01:58:42
【问题描述】:

使用 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') 时,它返回一个 字段的空数组,但 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),它会完美运行。

【问题讨论】:

  • 是表示一对多关系的表格吗?共享您的代码会加快速度
  • 是一对一的关系

标签: php forms symfony constraints embed


【解决方案1】:

我终于成功了。我只是更改了 userType 类的实现。

来源: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]
        );
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-17
    • 2011-02-07
    相关资源
    最近更新 更多