【发布时间】:2016-10-03 04:34:12
【问题描述】:
我知道模块中有路由问题/答案。但我已经尝试了所有这些,但我无法找到任何解决方法。
让我展示一下我做了什么。
我的文件夹结构
我的 ModuleServiceProvider.php
namespace App\Modules;
class ModulesServiceProvider extends \Illuminate\Support\ServiceProvider
{
/**
* Will make sure that the required modules have been fully loaded
* @return void
*/
public function boot()
{
if ($module = $this->getModule(func_get_args())) {
include __DIR__.'/'.$module.'/routes.php';
}
$this->loadViewsFrom(__DIR__.'/'.$module.'/Views', 'core');
}
public function register()
{
if ($module = $this->getModule(func_get_args())) {
}
}
public function getModule($args)
{
$module = (isset($args[0]) and is_string($args[0])) ? $args[0] : null;
return $module;
}
}
我的 BlogServiceProvider.php
namespace App\Modules\Blog;
class BlogServiceProvider extends \App\Modules\ModulesServiceProvider {
public function register()
{
parent::register('Blog');
}
public function boot()
{
parent::boot('Blog');
}
}
在 app\config\app.php 中
'App\Modules\Blog\BlogServiceProvider', //添加到提供者数组中
在应用\配置中
module.php 已创建
return [
'modules' => [
'Blog',
]
];
在 composer.json 中
"autoload": {
"classmap": [
"database",
"app/Modules"
],
"psr-4": {
"App\\": "app/",
"Modules\\": "Modules/"
}
},
一切似乎都很完美,但我被困在了路线中。
在我的应用\Modules\Blog\routes.php 中
Route::group(['namespace' => array('Modules\Blog')], function() {
Route::get('/',['as' => 'home', 'uses' => 'PostController@index']);
});
Route::get('/', ['as' => 'home', 'uses' => 'App\Modules\Blog\Controllers\PostController@index']);
我收到 PostController 不存在错误
我的控制器命名空间
namespace App\Modules\Blog\Controllers;
我在两条路线上都遇到了这个错误。我是否指定控制器路径。请提供任何帮助。如何在模块化应用中布线。
【问题讨论】:
-
我认为 composer.json 上的这一行:
"Modules\\": "Modules/"应该是"Modules\\": "app/Modules/"。并且不要忘记做composer dump-autoload。编辑:见@Ruffles 答案。您已经在 app/ 中拥有 Modules 文件夹。 -
根据 laravel-modules 的文档,指示将 Modules 目录作为 app 目录的兄弟,而不是其子目录。因为模块中命名空间的默认配置设置为以这种方式派生,并且更改它会导致为其配置中的每个模块指定自定义命名空间。