模型自定义客户端验证

时间:2017-01-13 11:56:47

标签: validation model yii2

我创建了一个名为" EndTimeValidator"的自定义验证器类。在common \ components namespace中。

代码:

namespace common\components;

use yii\validators\Validator;

class EndTimeValidator extends Validator
{
    public function init()
    {
        parent::init();
        $this->message = 'Event EndTime must be greater than StartTime.';
    }

    public function validateAttribute($model, $attribute)
    {
        $startDate = $model->StartDate;
        $endDate = $model->EndDate;

        $startTime = $model->StartTime;
        $endTime = $model->EndTime;

        if( ($startDate == $endDate) &&  $startTime != "" && $endTime != ""  )
        {
            if( strtotime($endTime) < strtotime($startTime) )
            {
                $this->addError($attribute, $this->message);
            }
        }
    }

    public function clientValidateAttribute($model, $attribute, $view)
    {
        $startDate = $model->StartDate;
        $endDate = $model->EndDate;

        $startTime = $model->StartTime;
        $endTime = $model->EndTime;

        if( ($startDate == $endDate) &&  $startTime != "" && $endTime != ""  )
        {
            if( strtotime($endTime) < strtotime($startTime) )
            {
                return <<<JS
    messages.push($this->message);
JS;
            }
        }
    }
}

在模型中,我首先将该路径包含在内,并将验证定义如下:

use common\components\EndTimeValidator;

['EndTime', EndTimeValidator::class],

问题已更新:

但它给了我以下例外:

  

在非对象

上调用成员函数getAttributeLabel()

我已经提到了link。我做错了吗?请指导我。谢谢!

2 个答案:

答案 0 :(得分:1)

使用:

View view = container.getChildAt(i);
TableLayout table=(TableLayout)view.findViewbyId(R.id.table);
TableRow row=(TableRow)table.getChildAt(0);
spinner = (Spinner) row.getChildAt(2);

答案 1 :(得分:0)

这是一个愚蠢的错误。但我会保留这个问题,因为它可能对某人有帮助。

错误是由 validateAttribute 函数

中的以下行引起的
$this->addError($attribute, $this->message);

将以上行替换为:

$model->addError($attribute, $this->message);