Yii自定义验证 - 类验证包含1个抽象方法

时间:2015-06-03 09:45:08

标签: php yii

我有一些验证方法需要用于多个模型。例如,可以跨多个模型共享电话号码的验证。

我从http://www.yiiframework.com/wiki/56/了解到,我可以创建一个可供多个模型使用的扩展程序,例如:

array('phone', 'ext.Validate.Validate'),

我已经修改过几次这行,可以确认它是正确的文件。

使用Validate.php中的以下内容

class Validate

我收到错误Call to undefined method Validate::applyTo(),因此我将其更改为

class Validate extends CValidator

正如上面的链接所示,但我现在得到错误:

Class Validate contains 1 abstract method

这是现有的文件:

<?php

class Validate extends CValidator
{
    public function phone($phone)
    {
        if(!ctype_digit($phone))
        {
            $this->addError($phone, Yii::t('flash','flash.not_authorised',array('{attribute}'=>$phone)).' '.ucfirst(str_replace('_', ' ', $phone)).' field');
        }
        else
        {
            return true;
        }
    }
}

有人可以指出我如何使用上述方法在多种方法之间进行共享验证。

1 个答案:

答案 0 :(得分:0)

好的,我设法解决了这个问题。

我在搜索http://www.yiiframework.com/wiki/56/

几个小时后发现了以下内容

主要问题是,在扩展CValidator时,您需要在类中使用以下方法:

protected function validateAttribute($object,$attribute)
{

}

这是型号代码(yii / protected / extension / Validate / Validate.php)

array('phone', 'ext.Validate.Validate'),

这是类代码:

<?php

class Validate extends CValidator
{
    protected function validateAttribute($object,$attribute)
    {
        self::{$attribute."Validation"}($object,$attribute);   
    }


    protected function phoneValidation($object,$attribute)
    {
        if(!empty($object->$attribute))
        {
            if(!ctype_digit($object->$attribute))
            {
                 $this->addError($object,$attribute,Yii::t('app','validation.telephon_failed',array('{attribute}'=>ucwords($attribute))));
            }
        }
    }
}