首页 > 解决方案 > Laravel 8 中间件 - 未定义的数组键 0

问题描述

我发现我的路由器没有错误。但是在运行时会发生错误。我的路由器怎么了?

我的路由器

<?php

use App\Http\Controllers\{HomeController, DashboardController};
use Illuminate\Support\Facades\{Route, Auth};


Auth::routes();

Route::get( uri: '/', action: HomeController::class)->name(name: 'home');

Route::middleware( middleware: 'auth')->group( callback: function () {

    Route::get( uri: 'dashboard', action: DashboardController::class)->name(name: 'dashboard');

});

错误信息是这样的。这是我第一次遇到这样的错误,我查了一下,但找不到相同的文章。

   ErrorException 

  Undefined array key 0

  at vendor/laravel/framework/src/Illuminate/Routing/Router.php:1325
    1321▕             return $this->macroCall($method, $parameters);
    1322▕         }
    1323▕ 
    1324▕         if ($method === 'middleware') {
  ➜ 1325▕             return (new RouteRegistrar($this))->attribute($method, is_array($parameters[0]) ? $parameters[0] : $parameters);
    1326▕         }
    1327▕ 
    1328▕         return (new RouteRegistrar($this))->attribute($method, $parameters[0]);
    1329▕     }

      +2 vendor frames 
  3   routes/web.php:11
      Illuminate\Support\Facades\Facade::__callStatic()

      +4 vendor frames 
  8   app/Providers/RouteServiceProvider.php:48
      Illuminate\Routing\RouteRegistrar::group()

标签: laravellaravel-8

解决方案


错误在于Route::middleware( middleware: 'auth')它应该如下所示。

Route::middleware('auth')->group( callback: function () {
   Route::get( uri: 'dashboard', action: DashboardController::class)->name(name: 'dashboard');

});

middleware()不接受命名参数,因为它不是真正的函数。它是通过魔术实现的,__call method因此它不支持命名变量。

/**
     * Dynamically handle calls into the router instance.
     *
     * @param  string  $method
     * @param  array  $parameters
     * @return mixed
     */
    public function __call($method, $parameters)
    {
        if (static::hasMacro($method)) {
            return $this->macroCall($method, $parameters);
        }

        if ($method === 'middleware') {
            return (new RouteRegistrar($this))->attribute($method, is_array($parameters[0]) ? $parameters[0] : $parameters);
        }

        return (new RouteRegistrar($this))->attribute($method, $parameters[0]);
    } }

参考:https ://github.com/laravel/framework/blob/8.x/src/Illuminate/Routing/Router.php#L1318


推荐阅读