【问题标题】:Laravel 8 middleware - Undefined array key 0Laravel 8 中间件 - 未定义的数组键 0
【发布时间】:2021-08-29 19:55:21
【问题描述】:

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

我的路由器

<?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()

【问题讨论】:

  • 。我更新了帖子。为什么它会抛出错误。仅供参考

标签: laravel laravel-8


【解决方案1】:

错误在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

【讨论】:

    猜你喜欢
    • 2021-08-13
    • 2022-07-06
    • 1970-01-01
    • 2021-03-26
    • 2021-09-20
    • 2022-11-10
    • 2021-01-07
    • 2021-07-03
    • 1970-01-01
    相关资源
    最近更新 更多