2016-01-21 197 views
0

我有一个路线文件是这样的:Laravel命名空间路由未找到

<?php 

Route::group(['prefix' => 'project1', 'namespace' => '\App\Project1\Controllers'], function() 
{ 

    Route::get('/', '[email protected]'); 
}); 

但是,当我尝试访问dev.api/project1/,它会抛出一个错误:

Class App\Http\Controllers\App\Project1\Controllers\UsersController does not exist 

您可以指出的是,很明显,你应该这样做:

Route::get('/', '\App\Project1\Controllers\[email protected]'); 

但是这不是无用的声明命名空间而不是实际上首先使用它?

无论如何,我应该怎么做才能调用控制器,而无需每次都预先命名空间?谢谢

回答

1

默认情况下,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'); 
        }); 
    } 
    
+0

如果我去你提供的第三个选项,我应该如何构建我的routes.php文件?我需要在原始应用/ Http/routes.php文件中做些什么吗?因为我希望前缀与名称空间 –

+0

@ChibangDayanan绑定您不需要对原始路由文件执行任何操作。就前缀而言,您可以将其添加到服务提供者中的组中,或者根本不能在服务提供者中添加组,只需在新的路由文件中处理它即可。 – patricus