为 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.php
中boot
方法的道具,它会工作。
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 使用某些命名空间的资源控制器路由名称是啥?