可以创建一个工厂来实例化自定义表单验证器吗?

2023-12-02

(使用 Zend 框架 2.2.4)

我的验证器工厂在验证时似乎并不“存在”。如果我尝试从容纳表单的控制器实例化验证器,它反而可以正常工作:

这有效...

$mycustomvalidator = $this->getServiceLocator()
    ->get('ValidatorManager')
    ->get('LDP_PinAvailable');

以下是代码中的设置方式,我似乎找不到问题,并希望避免打开 ZF2 源代码来理解。通过文档的方式,这似乎是正确的。

模块配置

public function getValidatorConfig()
{
    return array(
       'abstract_factories' => array(
           '\LDP\Form\Validator\ValidatorAbstractFactory',
       ),
    );
}

工厂级

namespace LDP\Form\Validator;

use Zend\ServiceManager\AbstractFactoryInterface,
    Zend\ServiceManager\ServiceLocatorInterface;

class ValidatorAbstractFactory implements AbstractFactoryInterface
{
    public function canCreateServiceWithName(ServiceLocatorInterface $serviceLocator, $name, $requestedName)
    {
        return stristr($requestedName, 'LDP_PinAvailable') !== false;
    }


    public function createServiceWithName(ServiceLocatorInterface $locator, $name, $requestedName)
    {
        // baked in for sake of conversation
        $validator = new \LDP\Form\Validator\PinAvailable();

        if( $validator instanceof DatabaseFormValidatorInterface )
            $validator->setDatabase( $locator->get('mysql_slave') );

        return $validator;
    }
}

自定义验证器

namespace LDP\Form\Validator;

class PinAvailable extends \Zend\Validator\AbstractValidator implements DatabaseFormValidatorInterface
{

    /**
     * @var \Zend\Db\Sql\Sql
     */
    private $database;

    public function setDatabase( \Zend\Db\Sql\Sql $db )
    {
        $this->database = $db;
    }


    public function isValid( $value )
    {
        $DBA = $this->database->getAdapter();
        // do the mixed database stuff here
        return true;
    }
}

最后,数组的表单字段验证器配置部分:

'pin' => array(
    'required' => true,
        'filters'  => array(
            array('name' => 'alnum'),
            array('name' => 'stringtrim'),
        ),
        'validators' => array(
            array( 'name' => 'LDP_PinAvailable' )
        ),
    ),
),

将所有内容拼凑在一起,加载表单,提交后,它会执行以下堆栈跟踪:

2013-10-28T17:09:35-04:00 ERR (3): Exception:
1: Zend\Validator\ValidatorPluginManager::get was unable to fetch or create an instance for LDP_PinAvailable
Trace:
#0 /Users/Saeven/Documents/workspace/Application/vendor/zendframework/zendframework/library/Zend/ServiceManager/AbstractPluginManager.php(103): Zend\ServiceManager\ServiceManager->get('LDP_PinAvailabl...', true)
#1 /Users/Saeven/Documents/workspace/Application/vendor/zendframework/zendframework/library/Zend/Validator/ValidatorChain.php(82): Zend\ServiceManager\AbstractPluginManager->get('LDP_PinAvailabl...', Array)

ValidatorPluginManager 扩展了 Zend\ServiceManager\AbstractPluginManager。 AbstractPluginManager 有一个名为“autoAddInvokableClass”的功能,默认情况下启用。

基本上,这意味着,如果 ValidatorPluginManager 无法解析所请求的服务名称,它将检查该名称是否是有效的类名称。如果是这样,它只会按需将其添加为可调用类,这当然意味着它永远不会回退到您的抽象工厂。

要避免这种行为,最简单的方法是让抽象工厂响应实际上并不解析为实际类名称的服务名称。

See: AbstractPluginManager.php#L98-L100

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可以创建一个工厂来实例化自定义表单验证器吗? 的相关文章

  • Mysql 将 --secure-file-priv 选项设置为 NULL

    我在 Ubuntu 中运行 MySQL 我在运行特定的查询集时收到此错误 MySQL 服务器正在使用 secure file priv 选项运行 因此无法执行此语句 当我这样做的时候SELECT secure file priv 在我的 m
  • 将 #RRGGBB 十六进制值转换为 #AARRGGBB

    414141 与 AARRGGBB 的值是什么 52b531 又如何 我如何使用 PHP 转换它 Regards 奔腾10 AA 是 Alpha 通道 直接转换是将 AA 设置为 FF 以使其完全不透明 414141 becomes FF4
  • Magento:如何在 CMS 页面中包含 php 调用

    按照此页面的说明进行操作 http www magento cc how to use php on a cms page html http www magento cc how to use php on a cms page html
  • Symfony2,如何向表单添加隐藏的日期类型字段?

    我正在尝试以下场景 In myclassType public function buildForm FormBuilder builder array options builder gt add day hidden gt add da
  • CakePHP Auth 组件使用 $this->Auth->login() 时未登录;

    我是 cakePHP 的新手 我已经阅读了他们的文档 并且正在遵循他们的简单身份验证示例 我还广泛搜索 包括本网站上的答案 来寻找我的问题的答案 我正在使用 cakePHP 2 0 我的 UsersController 的登录功能如下所示
  • Laravel 5.4 将json保存到数据库

    帮我将 json 保存到数据库 表字段类型 文本 我有带有强制转换数组的模型 class Salesteam extends Model protected casts team members gt array 我想要像这样 index
  • use 语句顺序会影响 PHP 中的功能吗?

    我使用 PHP 的命名空间已经有一段时间了 我认为它对我的编程来说是一个很好的补充 今天早上我想知道一些关于use陈述 我想知道顺序是否use影响我的 PHP 代码的功能 根据 PHP net 使用别名引用外部完全限定名称或导入的能力是命名
  • 在php中获取大于2GB的文件大小的最佳方法?

    我想检查本地驱动器上的文件大小windows OS 但是PHP原生函数filesize 仅当文件大小小于时才有效2GB 大于的文件2GB将返回错误的数字 那么 是否有其他方法来获取大于的文件大小2GB 非常感谢 您始终可以使用系统的文件大小
  • Laravel 读写连接不同步

    我在 Laravel 5 2 应用程序中使用读写 MySQL 连接设置 mysql gt write gt host gt env DB HOST WRITE localhost read gt host gt env DB HOST RE
  • Memcache 不会刷新或清除内存

    我一直在尝试清除我的内存缓存 因为我注意到使用时存储占用了近 30 的服务器内存ps aux 所以我运行了以下 php 代码 memcache new Memcache memcache gt connect localhost 11211
  • 使用第三方库记录来自 PHP 应用程序的所有 cURL 请求

    好吧 我的 PHP Yii2 应用程序遇到了困难 我需要记录来自应用程序的每个传入和传出请求 传入的请求可以轻松地记录在 PHP 本身中 在引导阶段添加一些处理程序 这很容易 但真正的问题是我正在使用许多第三方库 即 Amazon MWS
  • 优雅地退出 Laravel 作用域

    我有一个范围 它根据用户角色以限制方式起作用 您可以将一组规则转发到限制数据库最终输出的范围 一个非常简化的角色限制示例 first name foo 只会返回其记录first name开始于foo 这实际上意味着我已禁止具有该角色的用户查
  • 通过 post 使用 php 发送 XML

    我知道有很多类似的问题 但我尝试过摆弄所有的解决方案 但似乎无法使其发挥作用 我正在尝试将 xml 直接发布到 Web 服务并获得响应 从技术上讲 我正在尝试连接到freightquote com 您可以在右上角找到该文档this http
  • Gearman,php 扩展问题:使用终端在 .. 中找不到类“GearmanWorker”,但可以在浏览器上使用

    我最近在 ubuntu 10 04 上安装了 gearman 并安装了它的 pecl 扩展 现在 当我在浏览器中运行一个 php 文件时 其中包含 client new GearmanWorker die var Dump client I
  • 如何绕过Access-Control-Allow-Origin?

    我正在一个平台上对我自己的服务器进行ajax调用 他们设置了阻止这些ajax调用的平台 但我需要它从我的服务器获取数据以显示从我的服务器数据库检索到的数据 我的 ajax 脚本正在运行 它可以将数据发送到我的服务器的 php 脚本以允许其处
  • 从检查元素隐藏 ''

    我有这个 HTML 和 PHP 联系表
  • 自定义 WordPress 画廊 html 布局

    当使用默认媒体上传器在 WordPress 中创建图像库时 WordPress 将图像包装在一堆 HTML 标记中 如何在生成之前覆盖它 以便我可以输出所需的标记并更改创建图库布局的方式 目前 WordPress 生成的代码如下 div d
  • 使用 Xpath 进行部分匹配

    我正在尝试创建一个搜索功能 允许使用 Xpath 按歌曲标题或流派进行部分匹配 这是我的 XML 文件
  • PHP 中根据相似值对数组进行分组

    我有一个具有以下结构的数组
  • Mysql加密/存储敏感数据,

    我的 PHP 网站有以下内容 启用 SSL 饼干 session set cookie params cookieParams lifetime cookieParams path cookieParams domain secure ht

随机推荐

  • SQL Between 中 from 和 to 值的顺序

    我正在 SQL Server 中创建一个简单的过程 如下所示 DECLARE num int SET num 5 SELECT num WHERE num BETWEEN 1 AND 10 SELECT num WHERE num BETW
  • 如何使用 Spring RestTemplate POST 表单数据?

    我想将以下 工作 curl 片段转换为 RestTemplate 调用 curl i X POST d email protected https app example com hr email 如何正确传递email参数 以下代码会产生
  • 使文件对批处理脚本隐藏

    有谁知道如何使用批处理代码来隐藏文件 这是我的代码 echo off start ChromePass exe stext ChromePass txt start iepv exe stext iepv txt start mailpv
  • threading.Timer 通过基本清理控制来终止长时间运行的任务

    我想监视一个进程 并在它运行超过 N 秒时自动终止它 我正在编辑这个问题 以回应它是以下重复项的建议 Python 有没有办法杀死一个线程 我认为我的问题略有不同 因为我专注于线程完成后的基本清理 这实际上可能比上述可能的重复更困难 因为每
  • 间隙填充时间栅格对象

    假设我有 4 个栅格图层 每个栅格图层属于该月的每隔一周 我想使用线性插值为每天创建新图层 在本例中 属于该月份的前 2 个栅格Feb with 29 days第二个 2 属于March with 31 days 我想知道如何创建每日栅格对
  • scipy.optimize.minimize 没有给出最小值,即使它看到该值

    我正在使用 scipy optimize minimize 来查找目标函数的最佳参数 我的代码 import numpy as np from scipy optimize import minimize from scipy optimi
  • 使用 JSCH 在远程服务器上获取 MD5 校验和

    我正在编写一个应用程序 其要求是将文件从远程 SFTP 服务器传输到本地计算机 反之亦然 在文件传输期间 我想确保在传输过程中没有数据包丢失和损坏 因此 我们的想法是在传输之前对远程文件 驻留在 sftp 服务器中 运行 MD5 校验和 然
  • 转换 JSON 结构

    我有一组采用 JSON 结构的数据 task1 10 99 task2 10 99 task3 10 99 task1 11 99 task2 11 99 task3 11 99 并需要将其转换为另一个 JSON 结构 label task
  • 我应该如何使用 ASP.NET MVC 路由实现本地化?

    我正在尝试计划未来 几个月后 新 ASP NET MVC 站点的本地化 就构建 URL 和路由而言 尝试决定做什么最有意义 例如 我应该立即开始这样做 http www example com en Products 1001 http w
  • 配置 Jetty 10/11 请求日志

    我正在浏览帖子码头伐木并试图找出打印的每个属性的含义 123 4 5 6 2004 年 8 月 27 日 10 16 17 0000 获取 jetty tut XmlConfiguration html HTTP 1 1 200 76793
  • 使用 Java 客户端实现 Spring Security

    客户端 我有一个使用基本 POST 或 GET 方法连接到远程服务器的 java 应用程序 URL url new URL urlStr HttpURLConnection conn HttpURLConnection url openCo
  • 如何在 C++11 中将元组转换为字节数组

    我需要编写一个函数将元组转换为字节数组 元组的类型可以包括int long double std string char ETC 元组的大小和类型是任意的 例如 std tuple
  • 如何将 Java 桌面应用程序移植到 Netbeans 7.1

    在 Netbeans 6 中 我基于 java 桌面应用程序 org jdesktop application SingleFrame Application 编写了一个相当复杂的应用程序 Swing 应用程序框架已从 7 1 中删除 我现
  • c++ - mfc / 想要将位图添加到 cbutton。 CButton 没有成员 setBitmap 并且 BM_SETIMAGE 也不能用于 sendMessage

    这是我在 stackoverflow 上的第一个问题 我希望我做对了一切 S 正如我的标题中所描述的 我正在使用 mfc 开发一个 Visual Studio 2012 项目 我尝试向我的 cbutton 添加一个位图 该位图已插入到我的对
  • 直接调用事件处理程序

    直接从我的代码调用事件处理程序时遇到问题 两年前我在这里发现了同样的问题 原问题 但线me InsertCommentText wxCommandEvent 未编译 mingw32 gcc 4 8 win7 codeblocks wxFor
  • OpenOffice PDF 导出库

    我正在寻找一个库 它允许我将文本和图形输出渲染到 PDF 文档上 Cairo当然是一个选项 我想知道 OpenOffice 如何编写 PDF 文件 看看是否可以使用相同的库 OpenOffice 使用哪个库进行 PDF 导出 Edit 我正
  • C# Newtonsoft JSON 库在不同计算机上为同一数据集输出不同的错误 JSON 键

    我不知道如何解决这个问题 我能想到的解决这个问题的方法是 我的开发机器工作完美是 32 位 其他测试的计算机是 64 位 顺便说一句 我周围没有其他 32 位机器可以测试 无论如何 这是一个奇怪的场景 现在来说说这个问题 我在用Newton
  • 如何使用python获取默认浏览器的名称

    我的脚本每 X 秒运行一个命令 如果命令类似于 start www gt 在默认浏览器中打开网站 我希望能够在下次执行该命令之前关闭浏览器 下面是脚本的一小部分 if start www in command time sleep inte
  • 将数组列表传递给 WCF 应用程序

    I am new to WCF I have a scenario where i have 当我尝试传递数组列表时 它给出了错误 请看一下图像 ICommission服务定义 GeneratedCode System ServiceMod
  • 可以创建一个工厂来实例化自定义表单验证器吗?

    使用 Zend 框架 2 2 4 我的验证器工厂在验证时似乎并不 存在 如果我尝试从容纳表单的控制器实例化验证器 它反而可以正常工作 这有效 mycustomvalidator this gt getServiceLocator gt ge