为 Laravel 8 路由定义命名空间 [重复]

Posted

技术标签:

【中文标题】为 Laravel 8 路由定义命名空间 [重复]【英文标题】:Defining a namespace for Laravel 8 routes [duplicate] 【发布时间】:2021-01-10 05:14:18 【问题描述】:

关于 Laravel 8.x 中路由的问题

现在我在 web.php 文件中添加这样的行:

use App\Http\Controllers\FirstController;
use App\Http\Controllers\SecondController;
use App\Http\Controllers\ThirdController;

然后只处理FirstController::class 等。

在开始时只使用namespace App\Http\Controllers; 而不是所有use 行一个接一个x 次是错误的吗?

谢谢。

【问题讨论】:

如果您在该路由文件中声明命名空间,则必须调整对 Route 等的调用,但我想您可以....您也可以为该命名空间设置别名,然后引用通过Controllers\ThirdController::class 上课...但我不会太担心使用use 语句 【参考方案1】:

相反,我会简单地取消注释 app/Providers/RouteServiceProvider.php 中的这一行,这将恢复到 Laravel 'routes/web.php' 中的路由声明添加前缀 'routes/api.php'App\Http\Controllers 命名空间的行为。

/**
 * The controller namespace for the application.
 *
 * When present, controller route declarations will automatically be prefixed with this namespace.
 *
 * @var string|null
 */
 protected $namespace = 'App\\Http\\Controllers';

这个被注释掉的属性可能不在你的app/Providers/RouteServiceProvider.phpboot 方法的道具,它会工作。

public function boot()

    $this->configureRateLimiting();

    $this->routes(function () 
        Route::prefix('api')
            ->middleware('api')
            ->namespace($this->namespace)           // make sure this is present
            ->group(base_path('routes/api.php'));

        Route::middleware('web')
            ->namespace($this->namespace)            // make sure this is present
            ->group(base_path('routes/web.php'));
    );

【讨论】:

仅当该提供程序中的路由组使用该成员变量添加命名空间时,这是真正重要的部分 @lagbox 确实如此,更新后更清楚了,因为它在初始版本中不存在 是的,我认为有足够的反对意见,他们不得不重新添加这些东西,以便更容易改回旧方法;这应该是默认设置,可以选择“null”,而不是获取当前默认行为 8 @lagbox 100% 同意!砍掉它很奇怪。 虽然它解决了重复的问题,但却违背了它的初衷。关于更改的所有模糊都是为了帮助 IDE,您可以直接跳转到定义,但是启用旧设置,您不能跳转到定义,因为它现在是一个字符串。非常方便的功能恕我直言。但是,我想要的是命名空间,所以我不必重复自己。

以上是关于为 Laravel 8 路由定义命名空间 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.7 使用某些命名空间的资源控制器路由名称是啥?

关于laravel5.5路由的一些问题,持续更新

Laravel 5.1 中未定义的默认命名空间

需要更改 Laravel 控制器路径已在 serviceprovider 上设置命名空间为空

laravel入门教程

laravel5路由改为规则匹配