组内的 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 组不起作用,它没有看到命名空间参数的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 中读取元组内的列表

TailwindCSS 组内的链接:焦点元素失败,因为单击事件被阻止

Bootstrap - 输入组不起作用

C# 正则表达式捕获组不起作用

postgresql / 真空中的大量活/死元组不起作用

Azure 网络安全组不起作用? (附加到子网)