Как я могу проверить строку объекта проверки с помощью проверки laravel?

Я использую ларавель 5.6

Я использую https://laravel.com/docs/5.6/validation#form-request-validation на стороне сервера проверки

Мой контроллер такой:

<?php
....
use App\Http\Requests\UserUpdateRequest;

class UserController extends Controller
{
    ...
    public function update(UserUpdateRequest $request)
    {
        // dd($request->all());
    }
}

Перед выполнением оператора в методе обновления он вызовет UserUpdateRequest на стороне сервера проверки.

Проверка такая:

namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UserUpdateRequest extends FormRequest
{
    ....
    public function rules()
    {
        dd($this->request->all());
        return [
            'name'          => 'required|max:50',
            'gender'        => 'required',
            'birth_date'    => 'required',
            'address'       => 'required',
            'status'        => 'required'
        ];
    }
}

Результат dd($this->request->all()); как это :

Array
(
    [selected_data] => {"name":"agis","gender":"2","birth_date":"2018-03-13","address":"london"}
)

Как я могу проверить, являются ли данные массивом объектов?


person Success Man    schedule 14.03.2018    source источник


Ответы (2)


Вы можете использовать точечную нотацию следующим образом:

public function rules()
{
    return [
        'selected_data.name' => 'required|max:50',
        'selected_data.gender' => 'required',
        'selected_data.birth_date' => 'required',
        'selected_data.address' => 'required',
        'selected_data.status' => 'required',
    ];
}

Подробнее об этом читайте здесь: Проверка массива.

Надеюсь это поможет.

person Risan Bagja Pradana    schedule 14.03.2018
comment
Есть такая ошибка: The given data was invalid. The selected data.name field is required. The selected data.gender field is required. etc. Принимая во внимание, что я заполнил данные - person Success Man; 14.03.2018
comment
Интересно, должно ли это быть selected_data.*.name, где * представляет любой индекс selected_data. - person Tim Lewis; 14.03.2018
comment
@SuccessMan Попробуйте сбросить только ввод selected_data. Если вы попытаетесь сбросить его в классе UserUpdateRequest, вы можете сделать это так: dd($this->request->get('selected_data')). Проверьте, это array или string. Из вашего объяснения выше selected_data выглядит как строка JSON. - person Risan Bagja Pradana; 14.03.2018
comment
@Risan Bagja Pradana Я пытаюсь прокомментировать Тима Льюиса, это работает - person Success Man; 15.03.2018

Я бы добавил *, потому что если вы передаете несколько объектов, вам нужно проверить их все.

Ну вот так:

public function rules()
{
    return [
        'selected_data.*.name' => 'required|max:50',
        'selected_data.*.gender' => 'required',
        'selected_data.*.birth_date' => 'required',
        'selected_data.*.address' => 'required',
        'selected_data.*.status' => 'required',
    ];
}
person MP-programming    schedule 29.07.2020