想知道以前是否有人遇到过这个问题。 我使用预配置的表单规范使用Zend \ Form \ Factory创建表单,我也将FormElementManager注入工厂,以便它可以找到我的自定义元素等。
我的问题是:
即使任何自定义验证器都在表单中注册,它们也不会触发isValid()方法。有什么我需要做的就是通过使用factory创建表单来触发isValid()。
我的来源如下:
$spec = [
'hydrator' => '...',
'fieldset' => [
...,
...,
...,
],
'input_filter' => [
...,
....
....,
//contains my custom validator in here
],
];
$factory = new Factory();
$factory->setFormElementManager($formElementManager);
$form = $factory->createForm($spec);
但是当我触发时:
$form->isValid()
它没有进入我的自定义验证器中的isValid调用。
答案 0 :(得分:0)
input filter factory, Zend\InputFilter\Factory
, is another dependency of the form factory。表单工厂使用此工厂来创建应过滤和验证的输入。
为了创建新输入并附加自定义过滤器和验证器,输入工厂使用Zend\InputFilter\InputFilterPluginManager
内的also seeds the two other plugin managers, the FilterManager
and the ValidatorManager
。
Zend\Validator\ValidatorPluginManager
是用于创建自定义验证程序的插件管理器。
因此,通过更新代码并手动设置此依赖关系,可以通过Zend\InputFilter\Factory
找到自定义验证器。
$formElementManager = $serviceManager->get('FormElementManager');
$inputFilterManager = $serviceManager->get('InputFilterManager');
$inputFilterFactory = new Zend\InputFilter\Factory();
$inputFilterFactory->setInputFilterManager($inputFilterManager);
$formFactory = new \Zend\Form\Factory();
$formFactory->setFormElementManager($formElementManager);
$formFactory->setInputFilterFactory($inputFilterFactory);
$form = $formFactory->createForm($spec);