您正在使用Laravel8。在Laravel 8的全新安装中,没有名称空间前缀会应用于您的路由加载到的路由组。
“在Laravel的早期版本中,RouteServiceProvider
包含一个$namespace
属性。此属性的值将自动添加到控制器路由定义和对action
帮助器/URL::action
方法的调用之前。在Laravel 8.x中,此属性为null
默认设置。这意味着没有自动命名空间前缀将由Laravel完成。” Laravel 8.x Docs-发行说明
不使用名称空间前缀时,在路由中引用控制器时,必须使用控制器的完全合格类名称。
use App\Http\Controllers\UserController;
Route::get('/users', [UserController::class, 'index']);
Route::get('/users', 'App\Http\Controllers\UserController@index');
如果您喜欢旧方法:
App\Providers\RouteServiceProvider
:
public function boot()
{
...
Route::prefix('api')
->middleware('api')
->namespace('App\Http\Controllers')
->group(base_path('routes/api.php'));
...
}
对要为其声明名称空间的任何路由组执行此操作。
该$namespace
属性:
尽管在发行说明中提到了$namespace
要在您的属性上设置的内容,并在您的内容RouteServiceProvider
中进行了注释,RouteServiceProvider
但这对您的路线没有任何影响。当前仅用于添加名称空间前缀以生成操作的URL。因此,您可以设置此变量,但它本身不会添加这些名称空间前缀,您仍然必须确保在将名称空间添加到路由组时使用此变量。
此信息现在在《升级指南》中
Laravel 8.x Docs-升级指南-路由
升级指南显示的重要部分是您要在路由组上定义名称空间。单独设置$namespace
变量仅有助于生成操作的URL。
再次强调一下,重要的是为路由组设置名称空间,它们恰好通过$namespace
直接在示例中引用成员变量来实现。
更新:
如果从8.0.2版本开始安装了Laravel 8的新副本,则laravel/laravel
可以取消注释protected $namespace
成员变量RouteServiceProvider
以返回到旧方法,因为路由组已设置为将此成员变量用于组的命名空间。
取消注释会将名称空间前缀添加到分配给路由的控制器的唯一原因是,因为路由组已设置为使用此变量作为名称空间:
...
->namespace($this->namespace)
...
Api
文件夹中?