如何在 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 路由?

php中laravel框架的控制器如何获取路由传过来的可选参数?

测试是否在Laravel中调用webhook路由

Laravel 5.7 和 Vue 路由模式

如何在 Laravel 5.2 中使用资源声明路由