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