Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程

发布时间 - 2025-12-13 00:00:00    点击率:
Laravel 提供灵活的表单验证机制,支持内置规则、闭包自定义及可复用的规则类,推荐使用 Form Request 解耦控制器逻辑,还可通过 ServiceProvider 全局注册规则提升复用性。

在 Laravel 中,表单请求验证是确保用户输入数据合法的重要环节。Laravel 提供了强大的 Validator 机制,除了使用内置规则外,还可以轻松自定义验证规则。下面教你如何写 Laravel 请求验证,以及如何创建自定义表单验证规则。

使用内置 Validator 验证请求

在控制器中,你可以通过 validate() 方法或使用 Validator 门面来验证请求数据。

示例:在控制器方法中验证表单

use Illuminate\Support\Facades\Validator;

public function store(Request $request)
{
    $validator = Validator::make($request->all(), [
        'name' => 'required|string|max:255',
        'email' => 'required|email|unique:users',
        'password' => 'required|min:6|confirmed',
    ]);

    if ($validator->fails()) {
        return redirect()->back()
            ->withErrors($validator)
            ->withInput();
    }

    // 验证通过,继续处理逻辑
}

创建 Form Request 类进行验证

更推荐的方式是使用 Form Request,它将验证逻辑从控制器中解耦。

生成请求类:

php artisan make:request StoreUserRequest

编辑生成的请求类:

class StoreUserRequest extends FormRequest
{
    public function authorize()
    {
        return true; // 控制是否授权该请求
    }

    public function rules()
    {
        return [
            'name' => 'required|string|max:255',
            'email' => 'required|email|unique:users',
            'password' => 'required|min:6|confirmed',
        ];
    }
}

在控制器中使用:

public function store(StoreUserRequest $request)
{
    // 数据已自动验证,直接使用
    User::create($request->validated());
}

自定义验证规则(使用闭包)

如果内置规则不够用,可以在验证时使用闭包来自定义逻辑。

示例:验证用户名不能为特定值

$validator = Validator::make($data, [
    'username' => [
        'required',
        function ($attribute, $value, $fail) {
            if (strtolower($value) === 'admin') {
                $fail('用户名不能为 admin。');
            }
        },
    ],
]);

创建可复用的自定义验证规则

Laravel 允许你创建可复用的自定义规则类,适合复杂或多个地方使用的验证逻辑。

生成自定义规则:

php artisan make:rule ValidAgeRule

编辑规则类:

class ValidAgeRule implements Rule
{
    public function passes($attribute, $value)
    {
        return $value >= 18;
    }

    public function message()
    {
        return '年龄必须满 18 岁。';
    }
}

在验证中使用:

'age' => ['required', new ValidAgeRule],

注册全局自定义规则(可选)

你也可以通过 Validator 门面向全局注册自定义规则,方便在多处使用。

在 AppServiceProvider 的 boot 方法中:

use Illuminate\Support\Facades\Validator;

public function boot()
{
    Validator::extend('uppercase', function ($attribute, $value, $parameters, $validator) {
        return strtoupper($value) === $value;
    });

    Validator::replacer('uppercase', function ($message, $attribute, $rule, $parameters) {
        return str_replace(':attribute', $attribute, $message);
    });
}

然后在规则中使用:

'name' => 'required|uppercase'

基本上就这些。Laravel 的验证系统灵活又强大,合理使用可以大幅提升开发效率和代码可维护性。自定义规则让复杂业务逻辑也能被清晰封装。


# php  # word  # laravel  # cad  # app  # ai  # red  # 封装  # 表单验证  # 闭包  # 自定义  # 表单  # 复用  # 器中  # 能为  # 还可以  # 你可以  # 多个  # 你也  # 也能 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251811 】 【 AI营销90571


相关推荐: 潮流网站制作头像软件下载,适合母子的网名有哪些?  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  Laravel如何自定义分页视图?(Pagination示例)  如何在云服务器上快速搭建个人网站?  Linux系统命令中screen命令详解  高防服务器租用指南:配置选择与快速部署攻略  零基础网站服务器架设实战:轻量应用与域名解析配置指南  Python文件异常处理策略_健壮性说明【指导】  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  实例解析Array和String方法  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  无锡营销型网站制作公司,无锡网选车牌流程?  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  如何快速配置高效服务器建站软件?  javascript中的try catch异常捕获机制用法分析  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  Laravel如何使用模型观察者?(Observer代码示例)  Laravel Docker环境搭建教程_Laravel Sail使用指南  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  Laravel如何实现本地化和多语言支持?(i18n教程)  网站制作报价单模板图片,小松挖机官方网站报价?  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  JavaScript如何实现类型判断_typeof和instanceof有什么区别  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  免费网站制作appp,免费制作app哪个平台好?  如何彻底删除建站之星生成的Banner?  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  微信推文制作网站有哪些,怎么做微信推文,急?  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  如何快速查询网址的建站时间与历史轨迹?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  如何在新浪SAE免费搭建个人博客?  linux top下的 minerd 木马清除方法  个人摄影网站制作流程,摄影爱好者都去什么网站?  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  如何在建站之星网店版论坛获取技术支持?  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  如何用已有域名快速搭建网站?