Как вы знаете, Laravel 5 изменяет способ, которым вы вызываете validator
, старый способ вызывает validator facade
, но теперь в базовом классе Controller присутствует признак ValidatesRequests
, но метод validate
принимает запрос как массив значений, но когда вы определяете параметры вашего маршрута, эти значения не сохраняются в Request
, так как я могу проверить эти параметры?
Редактировать:
Маршрут:
Route::get('/react-api/{username}', 'ProfileController@getUsername');
контроллер:
public function getUsername(Request $request, $username) { $v = $this->validate($request, ['username' => 'required']); }
Итак, вопрос, как я могу проверить этот параметр имени пользователя?
Ответ Маникса не работал для меня, у меня были те же проблемы, что и Илияс. Проблема заключается в том, что параметры маршрута автоматически не доступны для 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', ]; }
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', ]); }
Предположите следующий маршрут:
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