Laravel 4 Custom Validator抛出BadMethodCallException

时间:2013-06-04 03:32:03

标签: php laravel laravel-4

我正在构建我的第一个Laravel 4应用程序,并尝试扩展Validator类以简单地检查路径是否存在。在official instruction之后,我想出了这个:

应用程序/库/ CustomValidator.php:

class CustomValidator extends Illuminate\Validation\Validator {
    public function validatePathExists($attribute, $value, $parameters) {
        return is_dir($value);
    }
}

Validator::resolver(function() {
    return new CustomValidator;
});

在控制器中(稍微剥离):

    $rules = array(
        'path'      => 'required|path_exists',
    );

    $v = Validator::make(Input::get(), $rules); 

此代码会抛出BadMethodCallException,并显示以下消息:Method [validatePathExists] does not exist.

我已将app/libraries添加到composer.json自动加载:

"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/models",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php",
        "app/libraries"
    ]
},

然后运行composer dump-autoload。实际上,在同一个app/libraries目录下有一个Helper.php,它工作正常。

另外,在app/start/global.php中(顺便说一句,我不太明白为什么我们必须(?)在两个地方拥有相同的自动启动寄存器。)

ClassLoader::addDirectories(array(

    app_path().'/commands',
    app_path().'/controllers',
    app_path().'/models',
    app_path().'/database/seeds',
    app_path().'/libraries',

));

仍然发生错误。任何的想法? 非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您没有正确注册验证器解析器。

将下面的语法与您的代码进行比较。

Validator::resolver(function($translator, $data, $rules, $messages)
{
    return new CustomValidator($translator, $data, $rules, $messages);
});