我正在构建我的第一个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',
));
仍然发生错误。任何的想法? 非常感谢您的帮助。
答案 0 :(得分:0)
您没有正确注册验证器解析器。
将下面的语法与您的代码进行比较。
Validator::resolver(function($translator, $data, $rules, $messages)
{
return new CustomValidator($translator, $data, $rules, $messages);
});