【问题标题】:can we have less code for validation form in laravel if i have more than 20 inputs如果我有超过 20 个输入,我们可以在 laravel 中减少验证表单的代码吗
【发布时间】:2020-01-01 17:22:25
【问题描述】:

如果我有超过 20 个字段,我们可以用更少的代码来验证吗??? 我不想写所有输入都需要。

$request->validate([
        'first_name' => 'required',
        'last_name' => 'required',
        'gender' => 'required',
        'date_of_birth' => 'required',
        'place_of_birth' => 'required',
        'nationality' => 'required',
        'mobile_number' => 'required',
        'email' => 'required|email|unique:informations',
        'home_region' => 'required',
        'digital_address' => 'required',
        'school_name' => 'required',
        'school_region' => 'required',
        'school_digital_address' => 'required',
        'school_level' => 'required',
        'school_program_of_study' => 'required',
        'patron_first_name' => 'required',
        'patron_last_name' => 'required',
        'patron_gender' => 'required',
        'patron_mobile_number' => 'required'


    ]);

【问题讨论】:

  • 作为工作代码,这更适合 codereviews SE - 但我觉得它也不会成为主题
  • 这只是 20 行代码,它会自动为您检查所有内容,而不是您编写所有验证代码、确保其正常工作、测试等......它可以变得多么容易?

标签: php database laravel validation


【解决方案1】:

这是 laravel 进行验证所需的最少代码。

如果您不输入每个字段的名称,它应该如何知道请求中缺少的条目是必需的? laravel 需要标记下每个输入名称。

【讨论】:

    【解决方案2】:

    其实是有办法的。

    这是你的代码

    $request->validate([
            'first_name' => 'required',
            'last_name' => 'required',
            'gender' => 'required',
            'date_of_birth' => 'required',
            'place_of_birth' => 'required',
            'nationality' => 'required',
            'mobile_number' => 'required',
            'email' => 'required|email|unique:informations',
            'home_region' => 'required',
            'digital_address' => 'required',
            'school_name' => 'required',
            'school_region' => 'required',
            'school_digital_address' => 'required',
            'school_level' => 'required',
            'school_program_of_study' => 'required',
            'patron_first_name' => 'required',
            'patron_last_name' => 'required',
            'patron_gender' => 'required',
            'patron_mobile_number' => 'required'
        ]);
    

    现在在您的表单 html 中,您需要为所有这些字段创建一个数组,如下所示

    <form>
        <input type="text" name="person[first_name]">
        <input type="text" name="person[last_name]">
        <input type="email" name="email">
    </form>
    

    在你的控制器或请求中,你可以像这样使这个数组成为必需的

    $request->validate([
        'person' => 'required|array',
        'person.*' => 'required'
        'email' => 'required|email|unique:informations',
    ]);
    

    这样你可以在你的数组中拥有更少的索引;),希望它会有所帮助

    【讨论】:

    • 验证器如何知道person.first_name 是必需的,而不是person.last_name 是必需的?!
    • 你没在我的验证器中看到@N69S 我已经把它做成了一个数组
    • 我明白了,但是那个数组的女巫属性是 required ?需要多少个?你怎么知道所需的属性中缺少一个属性?
    • 它适用于所有人,Array(人)的所有元素都是必需的。总结一下php 'person.*' =&gt; 'required' 查看数组名后面的星号
    • 假设在表单中我删除/禁用输入名称first_name 所以它不会在查询中发送,你的验证器会检查它吗?它会返回first_name required 吗?
    【解决方案3】:

    当然!以下是如何遍历所有请求数据(包括您不打算发送的那些,这使得这是一个坏主意)并验证它们是否是必需的,除了需要更多规则(如“电子邮件”)的那些(可以自行验证) )

    $data = array_except($request->all(), ['_token', 'email']);
    foreach ($data as $key => $value) {
      $request->validate([$key => 'required']);
    }
    $request->validate(['email' => 'required|email|unique:informations']);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      • 2016-10-23
      • 1970-01-01
      • 2021-05-20
      • 1970-01-01
      相关资源
      最近更新 更多