Вопросы проверки формы запроса Laravel - PullRequest
0 голосов
/ 29 июня 2019

Я пытаюсь создать одно сообщение об ошибке для ввода массива:

Это моя форма:

    <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 по какой-то причине упущена.

Пожалуйста, помогите.

Update

Вот моя реализация с использованием подстановочного знака (*) с точечной нотацией.

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 была возможным решением этой проблемы с дублированием.

...