【问题标题】:Add a Validator 2 times in an Element on Zend在 Zend 的一个元素中添加 Validator 2 次
【发布时间】:2011-11-10 13:07:21
【问题描述】:

我做了一个Validator,它接收一个类实例和一个函数名,然后执行它。

这对于通过数据库表映射器执行许多自定义验证很有用。

问题是我不能多次将此验证器添加到元素中,我需要这样做...

示例:

我有一个包含用户名和密码元素的登录表单。对于用户名,我需要通过此验证器验证它是否已存在于数据库中,如果存在,我需要验证所选帐户是否已激活...

我知道我可以只创建一个函数来接收两者的结果,但是我的验证器应该只返回一个错误消息...

这里是验证器的构造函数:

/**
 *$class is a class instance
 *$function is the function name to execute in the class
 *$invalidReturns specifies when the validator should return the error message (default is when the function returns null, false or empty string)
 *$tokens are used as parameters of the function to execute
*/
public function __construct($class, $function, $invalidReturns=null, $tokens=null)
{
    $this->class = $class;
    $this->function = $function;
    $this->tokens = $tokens;
    $this->returns = $invalidReturns;
}

我该如何解决这个问题?有没有办法用动态名称在 PHP 中创建一个类?有没有办法向 Zend 中的元素添加相同的类 Validator 或者我应该更改我的 Valitor 以返回多条消息并将它们传递给构造函数?

【问题讨论】:

  • 您已经看过 Zend_Validate_Callback 了吗?这看起来与您想要的非常相似,因此可以节省您的工作并可能多次工作(我不确定)。
  • 我不知道,但正如我所见,这只适用于只有一个参数的方法(元素本身)。我的验证器适用于具有多个参数的函数(例如:用于验证特定电子邮件是否存在所选用户名的函数(均由用户插入))。我正在尝试更改我自己的验证器以接收多条消息。如果它有效,我关闭这个问题。我也会赞成你的回答,因为它可以解决像我这样的大多数情况。
  • 向回调传递更多变量不是问题,您可以将选项参数定义为参数 $validator = new Zend_Validate_Callback(array('callback' => array($this, 'someExample'), 'options' => array('arg1' => 'test', 'arg2', 'etc')); 类似的东西应该可以。我不确定你是否可以定义更多消息..
  • 嗯,我明白了……所以这个 Zend_Validate_Callback 和我做的 Validator 几乎一模一样。

标签: php zend-framework zend-form zend-form-element zend-validate


【解决方案1】:

Kees Schepers 在 cmets 中提供的解决方案应该可以工作,但正如我自己的“Zend_Validate_Callback”一样,我可以更改它的工作方式以允许定义多个消息。

现在运行良好 =)

无论如何,谢谢 Kees Schepers。下一次,我将使用 Zend_Validate_Callback 而不是做更多的工作 x)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 2017-02-20
    相关资源
    最近更新 更多