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 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何记录自定义日志?(Log频道配置)  如何在阿里云香港服务器快速搭建网站?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  奇安信“盘古石”团队突破 iOS 26.1 提权  如何快速搭建个人网站并优化SEO?  Laravel如何实现用户密码重置功能?(完整流程代码)  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  Laravel如何使用Collections进行数据处理?(实用方法示例)  详解CentOS6.5 安装 MySQL5.1.71的方法  iOS发送验证码倒计时应用  昵图网官方站入口 昵图网素材图库官网入口  python中快速进行多个字符替换的方法小结  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  Laravel观察者模式如何使用_Laravel Model Observer配置  javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  音响网站制作视频教程,隆霸音响官方网站?  如何解决hover在ie6中的兼容性问题  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  PHP正则匹配日期和时间(时间戳转换)的实例代码  MySQL查询结果复制到新表的方法(更新、插入)  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  如何在IIS7上新建站点并设置安全权限?  如何为不同团队 ID 动态生成多个独立按钮  Python图片处理进阶教程_Pillow滤镜与图像增强  iOS正则表达式验证手机号、邮箱、身份证号等  网站制作企业,网站的banner和导航栏是指什么?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  Laravel如何自定义错误页面(404, 500)?(代码示例)  高防服务器租用如何选择配置与防御等级?  Laravel如何使用Service Container和依赖注入?(代码示例)  EditPlus中的正则表达式 实战(1)  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  高防服务器:AI智能防御DDoS攻击与数据安全保障  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  Laravel如何为API生成Swagger或OpenAPI文档  韩国服务器如何优化跨境访问实现高效连接?  Swift中switch语句区间和元组模式匹配  Android Socket接口实现即时通讯实例代码  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权