2

我最近一直在试验 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'
];

我在我的模型中调用验证器,如下所示:

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

我收到以下错误:

坏方法调用异常

方法 [validateTimezone] 不存在。

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

谢谢您的帮助

最大限度

4

2 回答 2

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

您可以在官方文档中阅读更多关于此内容以及如何注册您自己的解析器的信息。

于 2013-06-04T01:32:10.957 回答
0

该功能应该是静态的吗?如果你删除static怎么办?

public function validateTimezone($attribute, $value, $parameters) {
    return !empty(Timezones::$timezones[$value]);
}
于 2013-06-03T13:09:22.013 回答