【发布时间】: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