将Laravel验证规则转换为html表单域

w8rqjzmb  于 2023-02-25  发布在  其他
关注(0)|答案(3)|浏览(113)

假设我有一个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表单字段?

92vpleto

92vpleto1#

你必须解析你的规则,然后循环解析的数据来构建一个表单,然后,我建议你使用局部视图来完成这个任务。
我已经在构建自动表单和文档时这样做了,所以我在这里写了一个Laravel包:https://github.com/Ifnot/ValidationParser.
在我的包的例子中,你只需要创建两个文件:

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

qxsslcnc2#

为了让验证规则在一个地方,将规则设置为变量。然后,将变量传递到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 }}"/>
4dc9hkyq

4dc9hkyq3#

我很难找到其他人思考这个相同的想法。我一定是没有使用正确的搜索条件。我今天实现了这个相同的概念2023在以下项目:https://github.com/arielenter/ValidationRulesToInputAttributes
在这个例子中,我使用laravel的Illuminate\Validation\ValidationRuleParser来分解和解析规则,后来我使用了一个“翻译器”,将适用的规则转换为输入属性。
我担心的是为什么似乎没有人能在2023年完成这项任务。我不确定我是否能胜任这项任务,但是如果没有人做过,我会试试。我只是觉得如果没有更有能力的人做过,那会很奇怪。我认为最困难的部分是为每个可能的属性创建一个扩展字典,这些属性可以根据规则应用。我可能会让用户自己提供字典之类的东西,但有些情况下是有条件的,所以我不确定这是否可行。现在我只会在每次需要的时候添加翻译。

相关问题