laravel - 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()
解决方案
错误在于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
推荐阅读
- powershell - 在第一封电子邮件之后,Send-MailMessage 充满了“System.Object[]”
- node.js - 在节点内部使用反应的不同方法及其优缺点
- linux - 如何使用 linux find 命令列出特定分钟或天未访问的文件?
- ruby - rpsec-puppet 功能?他们来自哪里?
- xamarin - DryIoC 寄存器配置
- c++ - 使用 clang ast-print 和 fsyntax-only 生成可编译代码
- python - len(browser.find_elements_by_class_name('foo')) 给出 0
- angular - 如何在 Angular 中的 *ngFor 期间跳过在数组中打印空元素?
- python-3.x - 在不同数据而不是相同数据中使用具有不同输入的 Pytest 夹具
- bootstrap-4 - 添加“全部”选项以在嵌入式 javascript 的引导表中选择过滤器组件