如何在 Laravel Moduler 开发中路由到控制器方法?
Posted
技术标签:
【中文标题】如何在 Laravel Moduler 开发中路由到控制器方法?【英文标题】:How to route to a controller method in Laravel Moduler development? 【发布时间】:2016-05-08 21:20:06 【问题描述】:我正在使用 "artem-schander/l5-modular": "dev-master"
进行 laravel 模块开发。
例如我创建了一个管理模块。
文件夹结构为 App/Modules/Admin。
所以 controller 相关的 Admin modules 放在 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 默认的 routes.php 文件中。
当我浏览时,我收到此错误
Class App\Http\Controllers\AdminController does not exist
据我了解,laravel 在其默认路径中查找 AdminController。
我该如何克服这个挑战?
【问题讨论】:
【参考方案1】:我找到了两种方法。
第一个选项
更改 RouteServiceProvider.php 中的 $namespace。
对我来说
private $namespace='\App\Modules';
所以对于管理模块我可以使用路由作为
Route::get('/', 'Admin\Controllers\AdminController@index');
我认为更改 Laravel 的默认值是个坏主意。
第二个选项
提供控制器的完整路径。
所以路线应该是这样的
Route::get('/','\App\Modules\Admin\Controllers\AdminController@index');
【讨论】:
【参考方案2】:如果控制器不在默认路径中,您可以通过完全限定的命名空间访问控制器。
试试:
Route::resource('admin', '\App\Modules\Admin\Controllers\AdminController');
【讨论】:
以上是关于如何在 Laravel Moduler 开发中路由到控制器方法?的主要内容,如果未能解决你的问题,请参考以下文章
在 Laravel 5 中,如何禁用特定路由的 VerifycsrfToken 中间件?
如何从 ReactJS 组件调用 Laravel Api 路由?