如何在 Laravel 模块开发中路由到控制器方法?
How to route to a controller method in Laravel Moduler development?
我正在使用 "artem-schander/l5-modular": "dev-master"
进行 laravel 模块开发。
例如我创建了一个管理模块。
文件夹结构为App/Modules/Admin。
所以 controller 与 Admin modules 相关,放在 App/Modules/Admin/Controllers/[=45= 下] 目录。
与管理模块相关的所有路由都放在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。
我怎样才能克服这个挑战?
如果控制器不在默认路径中,您可以通过完全限定的命名空间访问控制器。
尝试:
Route::resource('admin', '\App\Modules\Admin\Controllers\AdminController');
我找到了两种方法。
第一个选项
更改 RouteServiceProvider.php 中的 $ 命名空间。
对我来说
private $namespace='\App\Modules';
所以对于管理模块,我可以使用路由
Route::get('/', 'Admin\Controllers\AdminController@index');
我认为更改 Laravel 的默认值不是个好主意。
第二个选项
提供控制器的完整路径。
所以路线是这样的
Route::get('/','\App\Modules\Admin\Controllers\AdminController@index');
我正在使用 "artem-schander/l5-modular": "dev-master"
进行 laravel 模块开发。
例如我创建了一个管理模块。
文件夹结构为App/Modules/Admin。
所以 controller 与 Admin modules 相关,放在 App/Modules/Admin/Controllers/[=45= 下] 目录。
与管理模块相关的所有路由都放在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。
我怎样才能克服这个挑战?
如果控制器不在默认路径中,您可以通过完全限定的命名空间访问控制器。
尝试:
Route::resource('admin', '\App\Modules\Admin\Controllers\AdminController');
我找到了两种方法。
第一个选项
更改 RouteServiceProvider.php 中的 $ 命名空间。
对我来说
private $namespace='\App\Modules';
所以对于管理模块,我可以使用路由
Route::get('/', 'Admin\Controllers\AdminController@index');
我认为更改 Laravel 的默认值不是个好主意。
第二个选项
提供控制器的完整路径。
所以路线是这样的
Route::get('/','\App\Modules\Admin\Controllers\AdminController@index');