【问题标题】:Convert Laravel validation rules to html form fields将 Laravel 验证规则转换为 html 表单字段
【发布时间】:2016-10-10 06:16:06
【问题描述】:

假设我对某些 Model 有一个验证规则,例如对一个人模型的验证将是:

'first_name' => ['required', 'string'],
'last_name' => ['required', 'string'],
'birthday' => ['before:today', 'date'],
'salary' => ['min:0', 'max:2000', numeric],
....

因此,如果我编写了这些规则,那么手动编写相同的规则感觉不对,但对于 HTML 表单字段,例如:

<input type="text" name="first_name" required />
<input type="text" name="last_name" required />
<input type="date" name="birthday" max="2016-06-09"/>
<input type="number" name="salary" min="0" max="2000"/>

因此,如果产品负责人要求我更改规则,例如更改必填字段,甚至将最高工资从2000 更改为5000,我必须在验证规则和表单本身中手动更改。

所以我想知道,有没有什么自动的方法可以将 Laravel 验证规则转换为 HTML 表单字段?

【问题讨论】:

    标签: validation laravel laravel-5 laravel-5.2


    【解决方案1】:

    您必须解析规则,然后循环解析数据以构建表单。然后,我建议您使用部分视图来解决问题。

    我已经这样做是为了构建自动表单和文档。所以我在这里写了一个 Laravel 包:https://github.com/Ifnot/ValidationParser.

    在我的包示例中,您只需创建两个文件:

    • 表单刀片视图(包含解析验证的代码)
    • 字段刀片视图(用于显示表单项)

    【讨论】:

    • 我喜欢这个想法,这是我正在寻找的东西,但是对于某些验证选项来说似乎是错误的。例如,对于在 Laravel 中验证日期,我们需要设置 ['before:today', 'date']。但在 HTML 字段中,我需要看到 min="2016-06-09" 而不是 before="today"。修复后这个工具会很棒!
    • 如果不制作自己的表单生成器,您将无法生成表单。所以你必须解析(比如我的包)并构建与你的选项相对应的输入。
    【解决方案2】:

    要将验证规则放在一个位置,请将规则设置为变量。然后,将变量传递到 laravel 验证页面和刀片模板 (html) 中。

    那么,你在哪里设置变量:

    $MaxSalary = 2000;
    

    接下来,将你的变量传递给 Laravel 表单验证规则:

    'salary' => ['min:0', "max:$MaxSalary", numeric],
    

    然后,将其传递到您的刀片模板表单中:

    return view('form', ['MaxSalary' => $MaxSalary]);
    

    然后,在你的刀片模板中,使用变量:

    <input type="number" name="salary" min="0" max="{{ MaxSalary }}"/>
    

    【讨论】:

    • 和我说的有同样的问题。例如,如果要删除最高薪水规则?您必须从验证器规则和您编写的所有表单中手动删除它max="{{ MaxSalary }}"min="0" 也一样...
    • 我对您的问题的理解是,会有一个最高薪水,但它可能会从2000 变为5000 或任何数字,具体取决于产品负责人所说的。有了这条新信息,如果您添加第二个变量$SalaryRules,我的方法仍然可以工作,当设置为true 时,可以调用此逻辑,当设置为false 时,可以是没有规则的字段。
    • 我的问题是关于如何避免在验证器和 HTML 中手动编写规则。不仅仅是工资价值。正如我所说:changing the mandatory fields, or even...
    猜你喜欢
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    相关资源
    最近更新 更多