组内的 Laravel 组不起作用,它没有看到命名空间参数
Posted
技术标签:
【中文标题】组内的 Laravel 组不起作用,它没有看到命名空间参数【英文标题】:Laravel group inside group not working, its not seeing the namespace param 【发布时间】:2021-09-14 06:51:45 【问题描述】:也许是我做了一些愚蠢的事情,或者我不明白 Laravel 8 中的路由分组。
显示错误
目标类 [App\Http\Controllers\Admin\SettingsController] 不存在。
即使我清空缓存
\Controllers
- Admin
-- Settings
--- Settingscontroller
--- SomeController
--- ...
routes/admin.php
namespace App\Http\Controllers\Admin;
// the normal way
// use App\Http\Controllers\Admin\Settings\SettingsController;
Route::group(['middleware' => 'auth:sanctum'], function ()
// not working
Route::group(['namespace'=>'Settings'],function()
Route::get('settings', [SettingsController::class, 'index']);
Route::post('settings/update', [SettingsController::class, 'update']);
);
//working
Route::get('settings', [Settings\SettingsController::class, 'index']);
Route::post('settings/update', [Settings\SettingsController::class, 'update']);
);
【问题讨论】:
SettingsController::class
已返回完全限定名称。不需要namespace
分组。
对不起,我忘记在我的示例中添加一个文件夹
与SettingsController::class
对应的use
语句是什么?
更新了我的例子,使用...
如果不是通过 use
导入的,php 期望 SettingController::class
位于当前命名空间(即 App\Http\Controllers\Admin
)中。
【参考方案1】:
SettingsController::class
已经返回 fully qualified name。不需要'namespace'
分组。如果不是通过use
导入的,PHP 期望SettingController::class
位于当前命名空间中(根据文件第一行中的namespace
语句,它是App\Http\Controllers\Admin
)。我想,它不适用于::class
,因为返回值已经完全合格。该组的“命名空间”将在文件命名空间解析后应用,但为时已晚。
-
类名是
SettingsController
PHP 在指定的namespace
中查找类,如果文件没有则查找全局类
命名空间 App\Http\Controllers\Admin
附加在类名之前,因此现在它完全限定为 App\Http\Controllers\Admin\SettingsController
Laravel 的路由应用了组属性。此时,添加或添加 'Settings'
是没有意义的,因为您需要在类名中间添加它。
【讨论】:
以上是关于组内的 Laravel 组不起作用,它没有看到命名空间参数的主要内容,如果未能解决你的问题,请参考以下文章