使用工厂创建表单时,无法在ZF2中使用自定义验证程序

时间:2016-07-28 09:15:52

标签: zend-framework zend-framework2 zend-form zend-validate

想知道以前是否有人遇到过这个问题。 我使用预配置的表单规范使用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调用。

1 个答案:

答案 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);