- 后端
【免费下载链接】ardent
Self-validating, secure and smart models for Laravel's Eloquent ORM
Ardent 是一款专为 Laravel 框架打造的自验证智能模型库(Self-validating smart models for Laravel's Eloquent ORM)。它让 Eloquent 模型在调用save()时自动完成表单验证、数据填充和敏感字段处理,帮你彻底告别控制器里大段重复的验证样板代码。
为什么需要 Ardent:Laravel 表单验证的痛点
写 Laravel 项目时,你可能熟悉这样的套路:在控制器(或路由)里定义$rules、实例化Validator、判断passes()、处理错误再回显……每个表单都要重复一遍,控制器越来越"胖",代码既冗长又难维护。
Ardent 的思路非常直接:把验证规则写进模型本身。模型知道自己怎么验证、怎么填充、哪些字段需要加密,写完一次就能在项目间反复复用。这就是所谓"自验证(Self-validating)"的含义,核心实现位于 Ardent.php。
💡 Ardent 完全继承自
Illuminate\Database\Eloquent\Model,因此它和原生 Eloquent 模型可以自由混用——只有需要接收用户输入并验证的模型才需要改造。
一键安装 Ardent:composer 快速上手
安装非常简单,在项目中执行:
composer require laravelbook/ardent或在 composer.json 的require中加入laravelbook/ardent依赖,然后执行composer update。
从 composer.json 可以看到,Ardent 依赖illuminate/support、illuminate/database、illuminate/validation等 5.x 系列组件,体积轻量,不会给项目带来额外负担。
提示:如果你想在 Laravel 之外把 Ardent 当独立 ORM 使用,可以调用 Ardent::configureAsExternal() 传入数据库连接配置即可。
三步打造第一个自验证 Eloquent 模型
这是全文最关键的一步,只有 3 个小动作:
- 继承 Ardent:把模型的父类从
Model换成Ardent - 声明验证规则:用静态属性
static $rules定义,语法和 Laravel Validator 完全一致 - 直接保存:调用
save(),验证不通过会自动返回false并阻止入库
规则定义长这样(摘自 README.md 示例):
class User extends \LaravelArdent\Ardent\Ardent { public static $rules = [ 'name' => 'required|between:3,80|alpha_dash', 'email' => 'required|between:5,64|email|unique:users', 'password' => 'required|min:6|confirmed', ]; }之后控制器里就只剩清爽的两行逻辑:
$user = new User; $user->save(); // 无效则返回 falsesave()内部会先执行 validate(),通过才真正写库,验证逻辑见 internalSave()。
获取验证错误:errors() 一步到位
验证失败时,错误信息会被装进 Laravel 的MessageBag对象,挂靠在模型实例上。你可以:
- 用
$user->errors()或$user->validationErrors拿到完整错误集合 - 用
errors()->all()获取全部错误,validationErrors->get('email')获取某个字段的错误
这和Redirect::back()->withErrors(...)无缝配合,前端回显一行代码搞定,相关实现在 errors()。
Ardent 高阶实用功能清单 🔧
除了基础验证,Ardent 还内置了一组"脏活累活"自动化能力,全部只需在模型里打开一个开关:
| 功能 | 开启方式 | 作用 |
|---|---|---|
| 表单数据自动填充 | $autoHydrateEntityFromInput = true | 自动从Input::all()填充模型属性 |
| 强制填充(更新场景) | $forceEntityHydrationFromInput = true | 每次验证都重新填充属性 |
| 清理冗余字段 | $autoPurgeRedundantAttributes = true | 自动丢弃password_confirmation、_token、_method等字段 |
| 密码自动哈希 | $autoHashPasswordAttributes = true | 明文密码自动转为 Bcrypt 哈希入库 |
这意味着注册场景下,"逐字段赋值 → 手动 Hash → 逐字段检查"这一整段代码都不再需要——new User; $user->save();就是全部。自动填充与清理的细节分别实现在 validate() 和 performSave()。
模型钩子:在关键时刻插入自定义逻辑
Ardent 提供了比 Eloquent 事件更"传统"的钩子写法,在模型类里定义对应方法即可:
before/afterCreate、before/afterSave、before/afterUpdate、before/afterDeletebefore/afterValidate——返回false可中断验证,进而让save()失败
例如在beforeSave里做保存前处理。所有before钩子只要返回布尔false,当前操作就会停止,后面的after钩子也不会执行。钩子的注册逻辑集中在 boot()。
另外,你还能在运行时通过save()的参数临时传入beforeSave/afterSave闭包,无需改动模型类。
数组式定义关系:让模型类更整洁
写 Eloquent 模型时,一堆一行式的hasOne/hasMany方法很容易让类变得臃肿。Ardent 支持用静态数组$relationsData声明关系,用法与普通方法完全等价:
public static $relationsData = [ 'address' => [self::HAS_ONE, 'Address'], 'orders' => [self::HAS_MANY, 'Order'], 'groups' => [self::BELONGS_TO_MANY, 'Group', 'table' => 'groups_have_users'], ];支持的常量包括HAS_ONE、HAS_MANY、BELONGS_TO、BELONGS_TO_MANY、MORPH_ONE等十种,参数校验与分发逻辑见 handleRelationalArray()。
更新数据的唯一规则难题?交给 updateUniques
用unique规则更新记录时,Laravel 要求手动排除"正在更新的这条记录"(如unique:users,email,10),很麻烦。Ardent 会自动把模型主键补进unique规则里:
$model->updateUniques(); // 自动处理 unique 排除逻辑你只需要在规则里写unique或unique:users,email,表名、字段名、排除 ID 全部由 buildUniqueExclusionRules() 自动推断补齐。
其他值得了解的小特性
- 强制保存:forceSave() 会照常执行验证,但忽略结果直接入库,适合"先落库再修复"的容错场景
- 临时覆盖规则:
save($rules, $customMessages)可针对单次调用替换验证规则与自定义错误文案 - 自定义错误文案:通过
static $customMessages设置,与 Laravel Validator 语法一致 - 抛异常模式:把
$throwOnValidation设为true,验证失败时抛出 InvalidModelException,方便全局异常处理 - 多语言错误信息:内置英文 validation.php 和葡语 validation.php 语言包,供独立部署模式使用
- 查询增强:配套的 Builder.php 支持
$throwOnFind,让find/first未命中时直接抛出ModelNotFoundException
项目文件导航 📁
想深入阅读源码,从这几个入口开始即可:
- 核心模型基类:src/Ardent/Ardent.php
- 查询构造器扩展:src/Ardent/Builder.php
- 验证失败异常:src/Ardent/InvalidModelException.php
- 英文验证语言包:src/lang/en/validation.php
- 葡语验证语言包:src/lang/pt-br/validation.php
- 包配置与依赖声明:composer.json
- 单元测试配置:phpunit.xml
需要完整代码的话,可以克隆仓库到本地:
git clone https://gitcode.com/gh_mirrors/ar/ardent总结
Ardent 用极简的方式解决了 Laravel 开发中的高频痛点:验证规则随模型走、保存即验证、错误随手取,再配上自动填充、冗余字段清理、密码自动哈希、数组式关系声明等实用特性,让模型代码更短、控制器更薄、跨项目复用更顺畅。对于经常写表单驱动应用、受够了重复验证代码的 Laravel 开发者来说,它是一个轻量而高效的选择。
- 后端
【免费下载链接】ardent
Self-validating, secure and smart models for Laravel's Eloquent ORM
相关推荐
告别重复验证:Laravel Ardent 让你的 Eloquent 模型自动拥有智能验证能力
告别重复验证:Laravel Ardent 让你的 Eloquent 模型自动拥有智能验证能力 你是否还在为每个 Laravel 模型编写重复的表单验证代码?是
后端告别手动验证:Laravel Ardent如何让你的Eloquent模型拥有智能大脑
告别手动验证:Laravel Ardent如何让你的Eloquent模型拥有智能大脑 引言:你还在为Laravel模型验证头疼吗? 作为Laravel开发者,你
后端FanControl识别不到风扇怎么办:6步排查清单,找回消失的风扇
FanControl识别不到风扇怎么办:6步排查清单,找回消失的风扇 FanControl 是一款 Windows 平台的风扇控制软件,可以手动或按温度自动调节
后端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考