【问题标题】:Laravel form request validation CollectionLaravel 表单请求验证集合
【发布时间】:2020-12-11 13:12:37
【问题描述】:

在文档中找不到任何有关验证集合的信息。在 .NET Core 中,我可以创建一个模型并添加一些数据属性,自动将前端的列表绑定到模型,即使使用 jquery 验证也会显示所有错误。

我想用 Laravel 达到同样的效果

例如在 .NET Core 中,我会有类似的东西

public class Person {

    [Required]
    public string Name { get; set; }

}

在我要编写的 Razor 页面代码上,这给了我一个可以在我的视图中使用的变量

[BindProperty]
IList<Person> People { get; set; }

那么在我看来,我会像这样渲染它

@foreach(var person in Model.People)
{
    <input type="text" asp-for="person.Name" />
}

这会像这样在页面上输出

<input type="text" id="People_0_Name">
<input type="text" id="People_1_Name">
<input type="text" id="People_2_Name">
<input type="text" id="People_3_Name">

这将允许我检查控制器或页面上的模型状态,并自动检查列表中是否有任何错误。一切都做得很好很容易。

现在在 Laravel 上,我是新手,但我已经了解了表单请求和验证规则。

我有表单请求

class CreateContractRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'price' => 'required,
            'target' => 'required',
            // Want to add a collection here to like,  'people' => 'required
        ];
    }
}

class CreatePeopleRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'name' => 'required'   
        ];
    }
}

在 html 中我正在渲染这样的输入

@for($i = 1; $i < $personTotal; $i++)
    <input type="text" id="person{{$i}}" name="person{{$i}}">
@endfor

基本上只会渲染

<input type="text" id="person1" name="person1">
<input type="text" id="person2" name="person2">
<input type="text" id="person3" name="person3">

一切都不同。我知道也许我应该为 Person 类创建一个数组并将该变量发送到视图,但我没有使用模型的经验,因为我不需要访问数据库,只需与 API 通信。

总之,我只是想知道如何使数组或集合在 laravel 中更易于使用,从而具有验证规则?

【问题讨论】:

    标签: c# php html laravel laravel-blade


    【解决方案1】:

    如果有人和我有同样的问题,我发现了这个话题

    Laravel 5 - validate array as required, but allow an empty array to be passed

    但是这个对我不起作用。因为我在做一个 ajax 请求,并且请求中没有发送空属性,present 规则不起作用。

    但是,我确实已经有一个字段,一个复选框,说明是否需要此集合。

    我使用了requiredif

    在我的请求中

    public function rules()
    {
        return [
            'morePeople' => 'required',
            'people' => 'required_if:morePeople,true|array'
        ];
    }
    

    这只会使该字段在包含内容的请求中存在并且复选框被选中时才需要

    工作得非常好。 +1 为了这些干净的规则而 laravel。

    我还稍微更改了代码,似乎我不需要对主请求中的嵌套数组进行额外的表单请求。只需将规则添加到数组属性中,如下所示

    public function rules()
    {
        return [
            'morePeople' => 'required',
            'people' => 'required_if:morePeople,true|array',
            'people.name' => 'required_if:morePeople,true'
        ];
    }
    

    【讨论】:

      猜你喜欢
      • 2016-09-02
      • 2015-11-07
      • 2016-05-23
      • 2016-03-11
      • 2015-06-09
      • 1970-01-01
      • 2018-02-11
      • 2016-05-20
      相关资源
      最近更新 更多