【问题标题】:Unable to use custom validators in ZF2 when creating form using factory使用工厂创建表单时无法在 ZF2 中使用自定义验证器
【发布时间】:2016-12-02 14:09:31
【问题描述】:

想知道以前是否有人遇到过这个问题。 我正在使用预配置的表单规范使用 Zend\Form\Factory 创建表单,我还将 FormElementManager 注入到工厂中,以便它可以找到我的自定义元素等。

我的问题是:

即使在表单中注册了任何自定义验证器,它们也不会触发 isValid() 方法。我需要做什么才能通过使用工厂创建表单来触发 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。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 感谢亚历克斯,您的评论。
    • 问题不仅如此。基本上任何不需要的 zf2 表单元素都不会调用验证器链中的验证器,这导致了我面临的问题。我的解决方案基本上是在不需要输入时添加 Not_Empty 验证器,这会触发所有验证器,包括我的自定义验证器。见:akrabat.com/category/zend-framework-2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 2014-09-14
    • 1970-01-01
    • 2016-08-02
    相关资源
    最近更新 更多