【问题标题】:Extending Custom Validation-Class扩展自定义验证类
【发布时间】:2013-05-29 15:31:04
【问题描述】:

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

我收到以下错误:

BadMethodCallException

方法 [validateTimezone] 不存在。

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

感谢您的帮助

最大

【问题讨论】:

    标签: php oop laravel laravel-4


    【解决方案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 上阅读有关此内容以及如何注册自己的解析器的更多信息。

    【讨论】:

    • 嗨,杰森,感谢您的帮助。我已经实现了您的建议并且效果很好,但我无法摆脱自定义类会更清洁的感觉。我需要知道什么才能了解​​如何运行?
    【解决方案2】:

    那个函数应该是静态的吗?如果您删除 static 会怎样?

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

    【讨论】:

    • 嗨,Jari,感谢您的帮助。不幸的是,删除 static 并没有改变任何东西。
    猜你喜欢
    • 2015-07-13
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    相关资源
    最近更新 更多