Как проверить параметры маршрута в Laravel 5?


Как проверить параметры маршрута в Laravel 5?

11.04.2015 04:01:08 Просмотров 41 Источник

Как вы знаете, Laravel 5 изменяет способ вызова validator, старый способ вызывает validator facade, но теперь в базовом классе контроллера есть признак ValidatesRequests, но метод validate принимает запрос в качестве массива значений, но когда вы определяете параметры маршрута, эти значения не сохраняются в Request, так как я могу проверить эти параметры ?

Редактировать:

Маршрут:

Route::get('/react-api/{username}', 'ProfileController@getUsername');

Контроллер:

public function getUsername(Request $request, $username)
{
     $v = $this->validate($request, ['username' => 'required']);
}

Итак, вопрос в том, как я могу проверить этот параметр имени пользователя ?

У вопроса есть решение - Посмотреть?

Ответы - Как проверить параметры маршрута в Laravel 5? / How to validate Route Parameters in Laravel 5?

manix

11.04.2015 08:15:17

Предположим, что следующий маршрут:

Route::get('profile/{id}', 'ProfileController@show');

Вы все еще можете проверить параметр id как способ L4:

public function show(){
    $validator = \Validator::make(
        \Input::all(),
        [
             'id' => ['required', 'numeric']
        ]
    );

    // run validator here
}

Если вам нужно проверить конкретные данные, посмотрите на следующий пример:

public function getUsername(Request $request, $username)
{
    $validator = \Validator::make(
        [
             'username' => $username
        ],
        [
             'username' => ['required']
        ]
    );

    // run the validator here
}

L5 позволяет вам делать это двумя другими способами. Первый-с использованием универсального класса Request, введенного в контроллер:

public function show(Request $request){
    $this->validate($request, [
        'id' => ['required', 'numeric']
    ]);

    // do stuff here, everything was ok
}

В L5 вам разрешено вызывать функции validate (), которые получают запрос и правила для его выполнения. Эта функция отвечает за выполнение правил, если какое-то правило выходит из строя, то пользователь перенаправляется на предыдущий запрос

Наконец, в качестве второго варианта вы можете использовать проверку запроса формы. Помните, что каждое значение GET и POST может быть доступно через класс Request

Mitch

02.10.2015 01:28:33

Ответ маникса не работал на меня, у меня были те же проблемы, что и у Илиасса. Проблема в том, что параметры маршрута не доступны автоматически для FormRequest. В итоге я переопределил функцию all() в своем конкретном классе FormRequest:

public function all()
{
    // Include the next line if you need form data, too.
    $request = Input::all();
    $request['username'] = $this->route('username');
    return $request
}

Тогда вы можете кодировать правила как обычно:

public function rules()
{
    return [
        'username' => 'required',
    ];
}
Mahdyfo

19.07.2017 02:02:33

public function listTurns($doctor_id, $limit, $offset){
        $r = [
            'doctor_id' => $doctor_id,
            'limit' => $limit,
            'offset' => $offset,
        ];

        $validator = Validator::make($r, [
            'doctor_id' => 'required|numeric|min:1|exists:doctors,id',
            'limit' => 'required|numeric|min:1',
            'offset' => 'required|numeric|min:0',
        ]);
}
Elqolbi

28.12.2018 07:29:36

use Validator;

public function getUsername($username)
{
    $validator = Validator::make(['username' => $username], [
      'username' => 'required|string'
    ]);

    if ($validator->fails()) {
      return response()->json(['success' => false, 'errors' => $validator->messages()], 422);
    }
}
Gabriel Eduardo Caraballo Moya

18.07.2019 01:17:10

use Illuminate\Support\Facades\Validator;

public function getUsername($username) {
    $validator = Validator::make(['username' => $username], [
      'username' => 'required'
    ]);

    if ($validator->fails()) {
      return response()->json(['status' => 'error'], 400);
    }
}
jonshot

21.09.2020 11:15:30

Если вы планируете сделать это непосредственно в своем методе контроллера, вы можете сделать что-то вроде:

        public function getUser(Request $request)
    {
        $request->merge(['id' => $request->route('id')]);
        $request->validate([
            'id' => [
                'required',
                'exists:users,id'
            ]
        ]);
    }

Чтобы сделать это в пользовательском классе FormRequest, добавьте следующее:

    protected function prepareForValidation() 
    {
        $this->merge(['id' => $this->route('id')]);
    }

А в вашем методе rules:

    public function rules()
    {
        return [
            'id' => [
                'required',
                'exists:users,id'
            ]
        ];
    }
Помочь в развитии проекта:
Закрыть X