Как проверить параметры маршрута в 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']);
}
Итак, вопрос, как я могу проверить этот параметр имени пользователя?
Ответы
Ответ 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);
}
}