我有一个像这样的路线文件:
<?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');
但是,在没有首先实际使用它的情况下声明命名空间是不是没用?
无论如何,我应该怎样做才能在不预先添加名称空间的情况下调用控制器?感谢
答案 0 :(得分:1)
默认情况下,app/Http/routes.php
中的路由会自动加载到App\Http\Controllers
命名空间内。在此文件中,您指定的任何命名空间都将相对于该父命名空间。
如果您想修改此行为,可以在app/Providers/RouteServiceProvider.php
文件中完成。
一些快速选择:
您可以通过修改protected $namespace
属性来修改默认的父命名空间。
您可以删除$router->group()
方法中的初始map()
来删除任何默认的父命名空间。
您可以创建一个全新的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');
});
}