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

这似乎是我通过的id,这是我的代码的其余部分

中间件:


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

我已经通过了ID,这样我就可以将它们返回到特定用户ID的视图页面,但出于某种原因,它似乎不喜欢这样。有人有什么想法吗?

中间件不读取路由参数。使用冒号将参数传递给中间件。

Route::middleware(['AdminUserUpdate:123'])->group(function () {

链接到中间件参数文档

我建议更改验证字段的方式。

在您的情况下,此命令创建表单验证器文件

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 ...
];
}

有关验证表单的更多详细信息和方法,请查看链接:

表单请求验证

最新更新