如何在Laravel Moduler开发中路由到控制器方法?

时间:2016-01-31 11:30:28

标签: laravel module namespaces laravel-routing

我正在使用"artem-schander/l5-modular": "dev-master"进行laravel模块化开发。

例如,我创建一个管理模块。

文件夹结构是App / Modules / Admin。

App / Modules / Admin / Controllers / 目录下的管理模块相关的控制器

管理模块相关的所有路由都会放在 App / Modules / Admin / routes.php 文件中。

这是它的外观

Route::group(array('module' => 'Admin', 'middleware' => ['web'],'namespace' => 'App\Modules\Admin\Controllers'), function() {

    Route::resource('admin', 'AdminController');

}); 

与管理模块相关的所有视图文件都放在App / Modules / Admin / Views文件夹中。

我正在尝试使用此路径访问管理员的索引视图

Route::get('/', 'AdminController@index');

此路由位于laravel default routes.php文件中。

当我浏览时,我收到此错误

Class App\Http\Controllers\AdminController does not exist

据我所知,laravel在其默认路径中查找AdminController。

我如何克服这一挑战?

2 个答案:

答案 0 :(得分:1)

如果控制器不在默认路径中,则可以通过完全限定的命名空间访问控制器。

尝试:

Route::resource('admin', '\App\Modules\Admin\Controllers\AdminController');

答案 1 :(得分:0)

我找到了两种方法。

第一个选项

更改 RouteServiceProvider.php 中的 $ namespace

对我来说

private $namespace='\App\Modules';

因此对于Admin模块,我可以使用route as

Route::get('/', 'Admin\Controllers\AdminController@index');

我认为改变Laravel的默认值是个坏主意。

第二个选项

提供Controller的完整路径。

所以路线就像这样

Route::get('/','\App\Modules\Admin\Controllers\AdminController@index');