Laravel中Validator的验证扩展

虽然Laravel提供一套包括正则匹配在内的完善的验证机制,但你一定会遇到使用规则解决不了的验证,比如数据库验证,这时需要用到Validator的验证扩展。

(1)使用静态方法:Validator::extend
(2)使用对象调用:$validator->addExtension

下面是验证HTTP提交的商品分类信息的例子。

use \Illuminate\Http\Request;
use App\Exceptions\MyValidationException;
use App\GoodsCategory;

class GoodsValidator
{

    public static function validate(Request $request, $final = false)
    {
        $messages = [
            //'category_id.required' => ':attribute 输入不正确!',
            'category_id.required' => '抱歉,您输入的商品分类信息为空',
            'category_id.min' => '抱歉,您输入的商品分类信息长度有误',
            'category_id.category_id_check' => '抱歉,您输入的商品分类信息不存在',
        ];

        $rules = [
            'category_id' => 'required|min:4|category_id_check',
        ];

        Validator::extend('category_id_check', function($attribute, $value, $parameters) {
            return GoodsCategory::where('category_id', $value)->exists();
        });

        $validator = Validator::make($request->all(), $rules, $messages);
        /*
        $validator->addExtension('category_id_check', function($attribute, $value, $parameters) {
            return GoodsCategory::where('category_id', $value)->exists();
        });
        */
        if ($validator->fails()) {
            $messageBag = $validator->messages();
            $messageArr = $messageBag->getMessages();
            print_r($messageArr);
        }
    }

}
上一篇 laravel-admin文件管理插件media-manager
下一篇 Laravel 5 常用命令及性能优化
目录
文章列表
1 本地Node环境搭建
本地Node环境搭建
2
Android NDK基础18:C++_构造函数_析构函数_拷贝构造函数
Android NDK基础18:C++_构造函数_析构函数_拷贝构造函数
3
CMD命令行快速删除文件和文件夹
CMD命令行快速删除文件和文件夹
4
使用vue-cli快速搭建vue项目
使用vue-cli快速搭建vue项目
5
因为BitMap,白白搭进去8台服务器...
因为BitMap,白白搭进去8台服务器...
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。