Zend framework 如何为Zend_表单创建一个依赖于多个值的验证器?
我有一个表单只有一个文本字段(对于公司): 我还创建了一个小型验证器,强制要求公司拥有唯一的名称:Zend framework 如何为Zend_表单创建一个依赖于多个值的验证器?,zend-framework,zend-form,zend-validate,Zend Framework,Zend Form,Zend Validate,我有一个表单只有一个文本字段(对于公司): 我还创建了一个小型验证器,强制要求公司拥有唯一的名称: class Cas_Model_Validate_CompanyUnique extends Zend_Validate_Abstract { protected $_messageTemplates = array( 'exists' => '\'%value%\' is already a company.' ); /** * @par
class Cas_Model_Validate_CompanyUnique extends Zend_Validate_Abstract
{
protected $_messageTemplates = array(
'exists' => '\'%value%\' is already a company.'
);
/**
* @param string $value
* @return bool
*/
public function isValid($value)
{
$this->_setValue($value);
$company = Cas_Model_Gateway_Company::FindByName($value);
if ($company)
{
$this->_error('exists');
return false;
}
return true;
}
}
现在,这对于创建新公司来说非常有效。当我想允许编辑公司时,问题就出现了。这是因为对于编辑操作,虽然公司名称需要唯一,但包含已属于给定ID的名称的表单根本不是编辑(因此是有效的)。也就是说,如果数据库中不存在该名称,或者给定的名称与已分配给该ID的名称匹配,则该表单有效
然而,将其作为验证器编写似乎是有问题的,因为验证器只获取它正在处理的值,而不是有问题的ID
如何为这类事情编写验证器?您可以使用文档不完整的第二个
$context
参数isValid()
请参阅并向下滚动至注释“验证上下文”我认为此链接可能会对您有所帮助。
您必须使用Db NOR record exist用户,但要进行编辑,您可以在验证中指定exclude属性。no!Zend框架?记录不良?我从来没有猜到。谢谢可能重复的
class Cas_Model_Validate_CompanyUnique extends Zend_Validate_Abstract
{
protected $_messageTemplates = array(
'exists' => '\'%value%\' is already a company.'
);
/**
* @param string $value
* @return bool
*/
public function isValid($value)
{
$this->_setValue($value);
$company = Cas_Model_Gateway_Company::FindByName($value);
if ($company)
{
$this->_error('exists');
return false;
}
return true;
}
}