扩展自定义验证类

时间:2013-06-03 13:06:19

标签: php oop laravel laravel-4

我最近一直在尝试使用Laravel 4,并且正在尝试使用自定义验证类。

验证级

<?php

class CountdownEventValidator extends Validator {

    public function validateNotFalse($attribute, $value, $parameters) {
        return $value != false;
    }

    public function validateTimezone($attribute, $value, $parameters) {
        return !empty(Timezones::$timezones[$value]);
    }

}

我的规则设置如下:

protected $rules = [
    'title' => 'required',
    'timezone' => 'timezone',
    'date' => 'not_false',
    'utc_date' => 'not_false'
];

我在我的模型中调用Validator,如下所示:

$validation = CountdownEventValidator::make($this->attributes, $this->rules);

我收到以下错误:

  

BadMethodCallException

     

方法[validateTimezone]不存在。

我查了很多教程,但我找不到我的代码有什么问题。

感谢您的帮助

最高

2 个答案:

答案 0 :(得分:1)

当您致电Validator::make时,您实际上正在调用Illuminate\Validation\Factory::make,尽管该方法本身是非静态的。当你点击Validator课程时,你正在通过立面,在后台,电话看起来像这样。

App::make('validator')->make($this->attributes, $this->rules);

然后返回Illuminate\Validation\Validator的实例。

您可以使用Validator::extend注册自己的规则,也可以注册自己的解析器。我建议,现在,您只需使用Validator::extend扩展验证程序。

Validator::extend('not_false', function($attribute, $value, $parameters)
{
    return $value != false;
});

您可以在official documentation上阅读有关此内容以及如何注册自己的解析器的更多信息。

答案 1 :(得分:0)

该函数应该是静态的吗?如果您删除static怎么办?

public function validateTimezone($attribute, $value, $parameters) {
    return !empty(Timezones::$timezones[$value]);
}
相关问题