denarx / laravel-custom-validator
扩展默认的 Laravel 验证器,使规则更加严格
dev-master
2023-01-24 07:07 UTC
Requires
- php: >=7.1.3
This package is auto-updated.
Last update: 2024-09-24 10:38:37 UTC
README
默认的 Illuminate 验证器存在一些错误和功能。此包使其更加严格,并允许您轻松扩展它,而无需创建自定义 Factory 和 ServiceProvider,这使得更改内置规则的行为成为可能
安装
composer require show4me/laravel-custom-validator
对于 Lumen:将其添加到您的 bootstrap/app.php
$app->register(Denarx\LaravelCustomValidator\ValidationServiceProvider::class);
默认修复了以下问题
- integer - 现在接受 bool true 作为 1,现在抛出错误
- 非必需的 integer - 现在接受空字符串和 null,现在抛出错误
- 非必需的 string - 不检查最小长度,仅跳过,现在抛出错误
在您的应用程序中覆盖/扩展
您可以通过创建文件 /app/Validator/Validator.php 来简单地扩展以添加/更改规则
<?php namespace App\Validator; use Denarx\LaravelCustomValidator\Validator as CustomValidator; class Validator extends CustomValidator { public function validateNewRule($attribute, $value): bool { return $value==='test'; } public function validateInteger($attribute, $value): bool { return !is_string($value) && is_numeric($value) && filter_var($value, FILTER_VALIDATE_INT) !== false; } }
在此示例中,默认规则 "integer" 被覆盖以实现更严格的行为,数值字符串(如 "1")将被拒绝。我们添加了名为 "new_rule" 的新规则,该规则仅接受字符串 'test'。在拒绝时,我们将获得错误消息:"Error while validation"。要自定义它,我们需要创建文件 /resources/lang/en/validation.php
<?php $defaultTranslation = include(base_path('/vendor/laravel/lumen-framework/resources/lang/en/validation.php')); $customTranslation = [ 'new_rule' => 'The :attribute must be equal "test".', ]; return array_merge($defaultTranslation, $customTranslation);
现在我们有了消息:"标题必须等于 "test"."
您可以通过创建相同的文件 /app/Validator/Validator.php 但将其扩展为 DefaultValidator 而不是 CustomValidator 来仅使用扩展而不更改默认规则的行为。在这种情况下,验证器具有默认的 Illuminate 行为,但您仍然可以轻松扩展它。
<?php namespace App\Validator; use Illuminate\Validation\Validator as DefaultValidator; class Validator extends DefaultValidator { public function validateNewRule($attribute, $value): bool { return $value==='test'; } }