首页 > 解决方案 > Laravel Middleware Too little arguments to function error

问题描述

我正在尝试设置一个中间件来检查表单提交时输入是否为空以更新用户设置,如果是,则将它们返回到同一页面并出现错误。当我设置它时,它给了我错误

Too few arguments to function App\Http\Middleware\AdminUserUpdate::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' => \App\Http\Middleware\AdminUserUpdate::class,

路线:

Route::middleware(['AdminUserUpdate'])->group(function () {
        Route::post('/app/members/{id}/submit', 'App\Http\Controllers\Admin\Members\IndexController@Submit')->name('admin.members.submit'); 
    });

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

标签: phplaravel

解决方案


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

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

链接到中间件参数文档


推荐阅读