Laravel 8: 调用 route:list 时数组到字符串的转换

Laravel 8: Array to string conversion while calling route:list

我有一个 ArticleController 的资源控制器,我想在 web.php 中调用这个控制器,所以我编码:

use App\Http\Controllers\Admin\PanelController;
use App\Http\Controllers\Admin\ArticleController;

Route::namespace('Admin')->prefix('admin')->group(function(){
  Route::get('/admin/panel', [PanelController::class, 'index']);
  Route::resource('articles', [ArticleController::class]);
});

然后我尝试使用命令 php artisan route:list 来检查路由,但我收到此错误消息:

ErrorException

Array to string conversion

那么为什么会出现这个错误,我该如何解决?

Route::resource 期望第二个参数是字符串,而不是数组。

Route::resource('articles', ArticleController::class);

删除组对 namespace 的调用,您不需要任何命名空间前缀,因为您使用完全限定的 Class 名称 FQCN 来引用控制器。

Route::prefix('admin')->group(function () {
    Route::get('/admin/panel', [PanelController::class, 'index']);
    Route::resource('articles', ArticleController::class);
});

发生这种情况是因为您将 ArticleController 放在了方括号中。 删除方括号并保留如下:

use App\Http\Controllers\Admin\PanelController;
use App\Http\Controllers\Admin\ArticleController;

Route::namespace('Admin')->prefix('admin')->group(function(){
  Route::get('/admin/panel', [PanelController::class, 'index']);
  Route::resource('articles', ArticleController::class);
});

use App\Http\Controllers\Admin\PanelController;

Route::namespace('Admin')->prefix('admin')->group(function(){
  Route::get('/admin/panel', [PanelController::class, 'index']);
  Route::resource('articles', 'App\Http\Controllers\Admin\ArticleController');
});

资源方法需要对控制器的引用 class 作为第二个参数,但你给了它一个数组。

备注 如果您使用的是第一个代码段,请确保 class 正确 imported.Else 您将 运行 变成另一个错误。