【问题标题】:Laravel - Permanent validation for specific fieldLaravel - 特定字段的永久验证
【发布时间】:2019-12-24 05:20:08
【问题描述】:

我的网站中有很多地方要求人们指定他们的电话号码或其他类型的数据。每个地方,验证规则都是相同的,并且在每个验证器中一遍又一遍地链接相同的验证规则并不那么漂亮,并且不利于验证规则的未来更新。想一想,例如当我想更改电话号码验证规则时,我需要在每个表单验证器上进行更改。

我知道我可以使用扩展添加自定义验证规则并添加一些正常的 php 条件以实现所需的验证,但这并不是我想要做的,因为我想使用多个 Laravel 验证,而不是添加我自己的验证。

有没有办法做到这一点?我浏览了所有 Laravel 文档,但没有找到任何方法。

【问题讨论】:

  • 你试过这个create form request ??
  • @Jovs 他们在那里谈论创建完整的表单验证,它与特定字段无关。
  • 我想你想一次为你的所有表单创建一个验证器,因为它们是一样的,对吧?
  • @Jovs 不,我想为特定字段(如电子邮件、电话)创建一个验证器,该验证器将自动添加到包含此字段的所有表单中。例如,我有登录、注册和密码恢复表格,它们都包含电话号码。我希望使用以下规则验证所有形式的电话号码:'required|max:12'。如何在所有表单中专门为电话字段定义规则,而不在每个表单验证器上重复规则?
  • 这就是为什么我建议您可以创建一个表单请求并将其用于您想要的特定字段然后只需在您的控制器函数中调用它,只要它是相同的字段名称然后它会验证。

标签: php laravel laravel-5 php-7 laravel-5.8


【解决方案1】:

也许一个好的方法是创建一个 UsesCommonRules 特征,其中包含一个名为 getCommonRules() 的方法,该方法将返回一个包含规则的数组。

namespace App\Traits;

trait UsesCommonRules 
{
    public static function getCommonRules(){
        return [
            'date' => 'required|date',
            'type' => 'in:A,B'
        ];
    }
}

然后,您可以将任何其他规则与请求内的通用规则合并,如果您正在控制器中进行验证,则可以直接在控制器中合并。

namespace App\Http\Requests;

use App\Traits\UsesCommonRules;
use Illuminate\Foundation\Http\FormRequest;

class MyRequest extends FormRequest
{
    use UsesCommonRules;

    public function rules()
    {
        return array_merge(self::getCommonRules(), [
            'city_id' => 'required'
        ]);
    }
}

您可以在UsesCommonRules trait 中创建更多动态函数,例如接收参数以指定应返回的规则、排除哪些规则,或者为具有相同名称的字段组合规则。

【讨论】:

  • 我喜欢这种方法。但是,如果我在不应该包含名为date 的字段的表单验证器中使用此数组,那么即使我不希望它是必需的。
  • 正如我所提到的,您可以在 trait 中创建方法来过滤所带来的规则。实际上,您可以创建更多具有不同规则集的静态方法。
猜你喜欢
  • 2012-10-17
  • 2015-03-04
  • 1970-01-01
  • 2015-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-17
相关资源
最近更新 更多