【问题标题】:Laravel 5 validate cloned fields using form requestLaravel 5 使用表单请求验证克隆的字段
【发布时间】:2016-01-13 05:12:10
【问题描述】:

我有一个使用cloneya jQuery plugin 克隆表单元素的表单。将被克隆的元素如下所示:

<div class="form-group">
    <label for="name">Item name</label>
    <input class="form-control" name="name[]" type="text">
</div>
<div class="form-group">
    <label for="count">Item count</label>
    <input class="form-control" name="count[]" type="text">
</div>

如您所见,每个输入将是一个数组而不是字符串。我想验证那些使用Laravel Form Request。这是我的规则:

public function rules()
{
    return [
        'name'  => 'required|between:3,50',
        'count' => 'required|integer|min:1',
    ];
}

但这不起作用。当我提交表单时,我收到以下错误消息:

htmlentities() expects parameter 1 to be string, array given

我一直在寻找解决方案,但找不到合适的解决方案。任何建议将不胜感激!

【问题讨论】:

    标签: php jquery laravel-5


    【解决方案1】:

    基本上,在您的rules() 方法中,您需要确定namecount 元素在POST 中的数量,然后为每个元素创建规则:

    public function rules()
    {
        $rules = [];
    
        foreach ($this->request->get('name') as $index => $val) {
            $rules['name.' . $index] = 'required|between:3,50';
        }
    
        foreach ($this->request->get('count') as $index => $val) {
            $rules['count.' . $index] = 'required|integer|min:1';
        }
    
        return $rules;
    }
    

    请查看this post

    【讨论】:

    • 是的,我已经尝试过这种方式,但仍然无法正常工作。我认为原因是在字段名称中使用键/索引,例如&lt;input name="count[0]" type="text"&gt;。但我的问题是我们不知道有多少名称和计数用户将提交。
    • 您不必知道有多少namecount,因为您使用的是foreach 循环。 &lt;input name="count[0]"&gt; 应该对应于规则数组中的$rules['count.0']。您是否尝试故意导致验证错误并在您的视图中转储 $errors 变量?你能发布转储的$errors吗?
    • 你是对的,我们这里使用foreach,这样我们就不用担心提交了多少字段。但它仍然显示与以前相同的错误:htmlentities() expects parameter 1 to be string, array given。我无法转储 $errors 变量,因为请求尚未通过规则验证。
    • 那么这不是验证器问题。你能发布你的控制器的代码吗?特别是接收 POST 请求的方法。
    • 我认为问题不在控制器方面。 Laravel 在尝试使用给定规则处理请求时显示错误。所以问题应该出在请求类中。
    猜你喜欢
    • 1970-01-01
    • 2016-05-20
    • 2015-10-05
    • 2022-01-17
    • 2015-12-24
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    相关资源
    最近更新 更多