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]
);
}
}
使用 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]
);
}
}