Подтвердить что ты не робот

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

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

Edit:

Маршрут:

Route::get('/react-api/{username}', '[email protected]');

Контроллер:

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

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

4b9b3361

Ответ 1

Ответ Manix не работал у меня, у меня были те же проблемы, что и Iliyass. Проблема заключается в том, что параметры маршрута автоматически не доступны для 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',
    ];
}

Ответ 2

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',
        ]);
}

Ответ 3

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

Route::get('profile/{id}', '[email protected]');

Вы все еще можете проверить параметр 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

Ответ 4

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);
    }
}

Ответ 5

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);
    }
}