fourfortymedia / eloquent-model-guard
Requires
- php: >=8.0
- laravel/framework: >=8.0
Requires (Dev)
- mockery/mockery: ^1.4.4
- nunomaduro/collision: ^5.11
- orchestra/testbench: ^6.29
- phpunit/phpunit: ^8.5.19|^9.5.8
README
欢迎使用 eloquent-model-guard Laravel 包的 README 文件。此包为 Eloquent 模型的数据验证带来了一系列增强,为开发者提供了改进数据完整性和验证规则的控制。让我们深入了解此包的细节。
属性
eloquent-model-guard 包引入了将结构化和机器可读的元数据信息添加到声明的功能。这增强了数据验证的控制,尤其是在 Eloquent 模型中,并允许根据特定场景进行更精细的验证规则定制。
背景
数据库字段具有类型,这些类型定义了它们可以存储的数据的性质。这些类型通过强制执行验证规则来确保数据完整性和一致性。通常,这些设置是在迁移中执行的。不同的数据类型代表各种类型的数据,如数字、字符串和日期。通过指示字段的类型,数据库可以验证和执行规则以确保仅存储有效数据。这不仅防止了错误,还提高了查询性能和数据准确性。
虽然迁移在存储时建立数据完整性,但它们只执行一次。 eloquent-model-guard 包使用户能够在模型中更新和调整验证规则。这为应对不断变化的应用需求提供了显著优势。现在,开发者可以轻松地根据不断变化的企业需求定制验证规则,而无需更改数据库结构。这种动态和灵活的方法提高了验证的效率和适应性,从而使得应用程序更加健壮和响应。
新增功能
eloquent-model-guard 包带来了一些显著的改进
- 自定义验证规则:开发者可以使用自定义属性:
OnCreateRules
和OnUpdateRules
定义验证规则。这种定制允许根据特定场景对验证规则进行微调。 validateUsing
方法:现在Model
类包含一个validateUsing
方法,支持使用自定义验证规则。protected array $rules;
属性:已添加一个新属性,方便存储验证规则。
更改
以下更改已用于改进 Eloquent 模型中的验证
Model
类中的booted
方法现在在创建和更新时自动触发验证。- 在
__callStatic
方法中引入了新的静态调用方法validateUsing
。此方法可以动态和静态地使用。
上下文
eloquent-model-guard 包带来的增强极大地增强了 Eloquent 模型的数据验证。引入 OnCreateRules
和 OnUpdateRules
属性允许开发者为模型创建和更新分别创建特定的验证规则。这种验证的粒度使开发者能够针对单个模型、属性或属性进行验证的微调,从而促进代码组织的整洁性和验证逻辑的高效性。
安装
composer require fourfortymedia/eloquent-model-guard
在您的 Eloquent 模型中添加以下内容
class User extends Model { use \FourFortyMedia\EloquentModelGuard\Concerns\HasEloquentModelGuard; }
示例
让我们探索一些使用示例,以展示如何利用新属性
-
创建时的验证
use Illuminate\Database\Eloquent\Validations\OnCreateRules; #[OnCreateRules(['name' => 'required', 'email' => 'required|email'])] class User extends Model { #[OnCreateRules(['roles.*' => 'rule1|rule2')] private array $roles = []; }
-
更新时的验证
use Illuminate\Database\Eloquent\Validations\OnUpdateRules; #[OnUpdateRules(['email' => 'required|email'])] class User extends Model { // ... }
-
同时使用这两个属性
use Illuminate\Database\Eloquent\Validations\OnUpdateRules; #[OnUpdateRules(['email' => 'required|email'])] #[OnCreateRules(['name' => 'required', 'email' => 'required|email'])] class User extends Model { // ... }
-
在模型字段中使用: 注意:在模型属性中使用此功能时,请使用
private
或protected
关键字来定义这些属性,以确保它们不会干扰到您的attributes
use Illuminate\Database\Eloquent\Validations\OnUpdateRules; #[OnUpdateRules(['email' => 'required|email'])] #[OnCreateRules(['name' => 'required', 'email' => 'required|email'])] class User extends Model { #[OnUpdateRules(['required'])] protected string $name; #[OnUpdateRules(['email' => 'required|email'])] #[OnCreateRules('required|email')] protected string $email; }
please note that when using it on a sigle property, you may pass and accosiative array with a key that is
与值等于规则或作为数组或键传递规则的属性相同
-
自定义验证规则
$product = Product::validateUsing(function ($rules) { $rules['price'] = 'numeric|min:0'; return $rules; })->create($data);
-
创建和更新时的自动验证
protected static function booted() { static::creating(function (self $model) { $model->getModelRules(useOnCreateRules: false); $model->getPropertyRules(useOnCreateRules: false); $model->validate(); }); static::updating(function (self $model) { $model->getModelRules(); $model->getPropertyRules(); $model->validate(); }); }
注意
请注意,此拉取请求仍在进行中,并正在提交以供初步审查和反馈。根据收到的反馈,将进行进一步的改进和调整。
请记住,此包的功能仅在将属性应用于模型或属性时生效。此包不强制开发人员使用它,同时提供灵活性,并提供了强大的验证功能。
如有任何疑问或反馈,请随时联系此包的创建者Rikhotso先生。您的想法和建议非常宝贵。