目的:直接输入域名,根据后台设定的默认模块,直接跳转到默认模块的HomeController的index方法,并渲染出相应的视图
- 点击更新缓存按钮后对模块列表数据进行更新
// 新建模块信息存储表
Schema::create('modules', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->string('title')->comment('模块名称|input');
$table->string('name')->comment('模块标识|input');
$table->text('is_default')->comment('是否是默认模块|radio');
$table->text('front_access')->comment('前台访问|radio');
});
// 点击更新缓存按钮对模块信息进行更新
public function updateCache(ModuleService $moduleService) {
$moduleService->updateCache();
session()->flash('success', '模块缓存成功');
return redirect('/admin/module');
}
class ModuleService
{
public function updateCache() {
\DB::table('modules')->truncate();
// 使用了houdunwang/laravel-module扩展包
// 获取所有模块的列表
$modules = \HDModule::getModulesLists();
// 循环模块对象,并将信息存入模块信息表
foreach ($modules as $module) {
$data = [
'title' => $module['title'],
'name' => $module['name'],
'is_default' => 0,
// 判断模块是否有HomeController@index
'front_access' => $this->frontAccess($module)
];
Module::create($data);
}
return true;
}
public function frontAccess($module) {
$class = 'Modules\\'.$module['name'].'\Http\Controllers\HomeController';
return class_exists($class) && method_exists($class, 'index');
}
}
- 设定默认模块
public function setDefault(Module $module) {
$module->setDefault();
session()->flash('success', '设置默认成功');
return back();
}
public function setDefault() {
\DB::table('modules')->update(['is_default'=>0]);
$this->update([
'is_default' => 1
]);
return true;
}
- 输入域名时,前台根据设定好的模块信息进行跳转到相应的HomeController@index
Route::get('/', function (\Modules\Admin\Entities\Module $module) {
return app()->build('\Modules\\'.$module->getDefault().'\Http\Controllers\HomeController')->index();
});
public function getDefault() {
$default = $this->where('is_default', 1)->where('front_access', 1)->first();
return $default['name'];
}