fourfortymedia/eloquent-model-guard

此包最新版本(1.6)没有提供许可证信息。

1.6 2023-08-15 02:50 UTC

This package is auto-updated.

Last update: 2024-09-15 09:00:46 UTC


README

欢迎使用 eloquent-model-guard Laravel 包的 README 文件。此包为 Eloquent 模型的数据验证带来了一系列增强,为开发者提供了改进数据完整性和验证规则的控制。让我们深入了解此包的细节。

属性

eloquent-model-guard 包引入了将结构化和机器可读的元数据信息添加到声明的功能。这增强了数据验证的控制,尤其是在 Eloquent 模型中,并允许根据特定场景进行更精细的验证规则定制。

背景

数据库字段具有类型,这些类型定义了它们可以存储的数据的性质。这些类型通过强制执行验证规则来确保数据完整性和一致性。通常,这些设置是在迁移中执行的。不同的数据类型代表各种类型的数据,如数字、字符串和日期。通过指示字段的类型,数据库可以验证和执行规则以确保仅存储有效数据。这不仅防止了错误,还提高了查询性能和数据准确性。

虽然迁移在存储时建立数据完整性,但它们只执行一次。 eloquent-model-guard 包使用户能够在模型中更新和调整验证规则。这为应对不断变化的应用需求提供了显著优势。现在,开发者可以轻松地根据不断变化的企业需求定制验证规则,而无需更改数据库结构。这种动态和灵活的方法提高了验证的效率和适应性,从而使得应用程序更加健壮和响应。

新增功能

eloquent-model-guard 包带来了一些显著的改进

  • 自定义验证规则:开发者可以使用自定义属性:OnCreateRulesOnUpdateRules 定义验证规则。这种定制允许根据特定场景对验证规则进行微调。
  • validateUsing 方法:现在 Model 类包含一个 validateUsing 方法,支持使用自定义验证规则。
  • protected array $rules; 属性:已添加一个新属性,方便存储验证规则。

更改

以下更改已用于改进 Eloquent 模型中的验证

  • Model 类中的 booted 方法现在在创建和更新时自动触发验证。
  • __callStatic 方法中引入了新的静态调用方法 validateUsing。此方法可以动态和静态地使用。

上下文

eloquent-model-guard 包带来的增强极大地增强了 Eloquent 模型的数据验证。引入 OnCreateRulesOnUpdateRules 属性允许开发者为模型创建和更新分别创建特定的验证规则。这种验证的粒度使开发者能够针对单个模型、属性或属性进行验证的微调,从而促进代码组织的整洁性和验证逻辑的高效性。

安装

 composer require fourfortymedia/eloquent-model-guard

在您的 Eloquent 模型中添加以下内容

class User extends Model {
     use \FourFortyMedia\EloquentModelGuard\Concerns\HasEloquentModelGuard;
}

示例

让我们探索一些使用示例,以展示如何利用新属性

  1. 创建时的验证

    use Illuminate\Database\Eloquent\Validations\OnCreateRules;
    
    #[OnCreateRules(['name' => 'required', 'email' => 'required|email'])]
    class User extends Model {
        #[OnCreateRules(['roles.*' => 'rule1|rule2')]
        private array $roles = [];
    }
  2. 更新时的验证

    use Illuminate\Database\Eloquent\Validations\OnUpdateRules;
    
    #[OnUpdateRules(['email' => 'required|email'])]
    class User extends Model {
        // ...
    }
  3. 同时使用这两个属性

    use Illuminate\Database\Eloquent\Validations\OnUpdateRules;
    
    #[OnUpdateRules(['email' => 'required|email'])]
    #[OnCreateRules(['name' => 'required', 'email' => 'required|email'])]
    class User extends Model {
        // ...
    }
  4. 在模型字段中使用: 注意:在模型属性中使用此功能时,请使用 privateprotected 关键字来定义这些属性,以确保它们不会干扰到您的 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
    

    与值等于规则或作为数组或键传递规则的属性相同

  5. 自定义验证规则

    $product = Product::validateUsing(function ($rules) {
        $rules['price'] = 'numeric|min:0';
        return $rules;
    })->create($data);
  6. 创建和更新时的自动验证

    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先生。您的想法和建议非常宝贵。