我有一个这样的路由文件:
<?php
Route::group(['prefix' => 'project1', 'namespace' => ''App'Project1'Controllers'], function()
{
Route::get('/', 'UsersController@index');
});
但是当我尝试访问dev.api/project1/
时,它会抛出以下错误:
Class App'Http'Controllers'App'Project1'Controllers'UsersController does not exist
你可能会指出这是显而易见的,你应该做这样的事情:
Route::get('/', ''App'Project1'Controllers'UsersController@index');
但是,声明命名空间而不首先实际使用它不是没有用吗?
无论如何,我应该怎么做才能调用控制器而不每次都预置命名空间?谢谢
默认情况下,app/Http/routes.php
中的路由会自动加载到 App'Http'Controllers
命名空间中。在此文件中,您指定的任何命名空间都将相对于该父命名空间。
如果要修改此行为,可以在app/Providers/RouteServiceProvider.php
文件中执行此操作。
几个快速选项:
-
可以通过修改
protected $namespace
属性来修改默认父命名空间。 -
可以通过删除
map()
方法中的初始$router->group()
来删除任何默认的父命名空间。 -
您可以创建一个全新的
app/Project1/routes.php
文件,并将其加载到第二个路由器组中,并将App'Project1'Controllers
作为该文件中列出的任何路由的默认父命名空间:public function map(Router $router) { $router->group(['namespace' => $this->namespace], function ($router) { require app_path('Http/routes.php'); }); $router->group(['namespace' => 'App'Project1'Controllers'], function ($router) { require app_path('Project1/routes.php'); }); }