Php symfony 2.8:为foreach()提供的参数无效,无法进入约束/FormValidator
使用silex 2.0和symfony 2.8表单组件(不是sf2完整堆栈),我有一个带有多个字段的表单和一个嵌入表单 提交表单时,我遇到一个错误: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中,当
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]
);
}
}