#php #laravel
Вопрос:
Я пытаюсь настроить промежуточное программное обеспечение, чтобы проверить, пусты ли входные данные в форме отправки для обновления настроек пользователей, и если да, то вернуть их обратно на ту же страницу с ошибкой. Когда я его настраиваю, он выдает мне ошибку
Too few arguments to function AppHttpMiddlewareAdminUserUpdate::handle(), 2 passed in /var/www/market/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php on line 167 and exactly 3 expected
Похоже, это идентификатор, через который я прохожу, вот остальная часть моего кода
Промежуточный слой:
public function handle(Request $request, Closure $next, $id)
{
if($request->input('username') == NULL) {
return redirect()->route('admin.members.view', $id)->with('error', 'You must enter a username for this user in order to update their account!');
} elseif($request->input('email') == NULL) {
return redirect()->route('admin.members.view', $id)->with('error', 'You must enter a email for this user in order to update their account!');
} elseif($request->input('admin') == NULL) {
return redirect()->route('admin.members.view', $id)->with('error', 'You must select whether this user is a root admin or not in order to update their account!');
} elseif($request->input('banned') == NULL) {
return redirect()->route('admin.members.view', $id)->with('error', 'You must select whether this user is banned or not in order to update their account!');
} elseif($request->input('role') == NULL) {
return redirect()->route('admin.members.view', $id)->with('error', 'You must select a role for this user in order to update their account!');
}
return $next($request);
}
Ядро:
'AdminUserUpdate' => AppHttpMiddlewareAdminUserUpdate::class,
Маршрут:
Route::middleware(['AdminUserUpdate'])->group(function () {
Route::post('/app/members/{id}/submit', 'AppHttpControllersAdminMembersIndexController@Submit')->name('admin.members.submit');
});
Мне передали идентификатор, чтобы я мог вернуть их обратно на страницу просмотра для определенного идентификатора пользователя, но по какой-то причине это не нравится. У кого-нибудь есть какие-нибудь мысли?
Ответ №1:
Промежуточные программы не считывают параметры маршрута. Используйте двоеточие для передачи параметра в промежуточное программное обеспечение.
Route::middleware(['AdminUserUpdate:123'])->group(function () {
Ссылка на документы о параметрах промежуточного программного обеспечения
Комментарии:
1. Как именно это будет работать с моей страницей просмотра для каждого идентификатора пользователя?
2. Вместо использования промежуточного программного обеспечения добавьте проверку/перенаправление в начале метода контроллера.
3. Да, это то, что я обычно делаю, но хотел, чтобы функция контроллера была короткой и чистой — думаю, это не вариант с тем, как я пытаюсь это сделать. Спасибо за помощь!
Ответ №2:
Я предлагаю изменить способ проверки ваших полей.
В вашем случае эта команда создаст файл средства проверки формы
php artisan make:request UpdateUserRequest
В файле UpdateUserRequest.php
В этом блоке есть все правила, которые вы хотите проверить
public function rules()
{
return [
'username' => 'required',
'email' => 'required',
... other fields for validation ...
];
}
и внутри store
метода в вашем контроллере требуется только эта строка для обработки всех данных после проверки:
$validated = $request->validated();
а для пользовательских сообщений добавьте это в свой UpdateUserRequest
:
public function messages()
{
return [
'username.required' => 'You must enter a username for this user in order to update their account!',
'email.required' => 'You must enter a email for this user in order to update their account!',
... and other validation messages ...
];
}
Для получения более подробной информации и способов проверки ваших форм перейдите по ссылке: