Laravel Form Request验证问题

时间:2019-06-29 13:26:58

标签: laravel-5 laravel-validation

我正在尝试为数组输入创建一条错误响应消息:

这是我的表格:

    <div class="form-group  col-md-12">
        <div class="row">
            <div class="col-md-6">
                <label for="client-type">Client Type</label>
                <input type="text" name="client_type[]" class="form-control" value="Panelist" readonly>
            </div>
            <div class="col-md-6">
                <label for="commission-percentage">Commission Percentage</label>
                <input type="number" name="commission_percentage[]" class="form-control">
            </div>
        </div><br>
        <div class="row">
            <div class="col-md-6">
                <label for="client-type">Client Type</label>
                <input type="text" name="client_type[]" class="form-control" value="Non Panelist" readonly>
            </div>
            <div class="col-md-6">
                <label for="commission-percentage">Commission Percentage</label>
                <input type="number" name="commission_percentage[]" class="form-control">
            </div>
        </div>

这是我的控制器:

public function store(StoreCommissionsList $request)
{
    $attributes = $request->validated();

    dd($attributes);
}

最后是我的StoreCommissionsList表单请求:

public function rules()
{
    $commission = request('commission_percentage');

    $rules = [];

    $rules['role_id'] = 'required';
    $rules['client_type'] = 'required';

    if ( $commission[0] == null && $commission[1] == null ) 
    {
        $rules['commission_percentage'] = 'required';
    }

    return $rules;
}

public function messages()
{
    return [
        'role_id.required' => 'Please select a user role',
        'client_type.required' => 'Please input a client type',
        'commission_percentage.required' => 'Please fill in a percentage commission for each client type',
    ];
}

正在发生的事情是:如果表单中的所有字段均为空白,则就返回所需的验证消息而言,似乎只有role_id通过了验证检查。 commission_percentage完全没有经过验证,在输入role_id之后,表单将提交,意味着commission_percentage验证由于某种原因而被忽略。

请协助。

更新

这是我使用通配符(*)点表示法的实现。

public function rules()
{
    $rules = [];

    $rules['role_id'] = 'required';
    $rules['client_type.*'] = 'required';
    $rules['commission_percentage.*'] = 'required';

    return $rules;
}

为此,对于请求中的每个数组项,验证错误消息都会重复,对于我来说,是这样的:

The commission_percentage.0 field is required. 
The commission_percentage.1 field is required

因此,在我的rules中,较早的实现可能是解决此重复问题的方法。

0 个答案:

没有答案