Laravel学习笔记(32)域名直接访问模块index视图

目的:直接输入域名,根据后台设定的默认模块,直接跳转到默认模块的HomeController的index方法,并渲染出相应的视图

  1. 点击更新缓存按钮后对模块列表数据进行更新

在这里插入图片描述

		// 新建模块信息存储表
        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');
    }
}
  1. 设定默认模块
    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;
    }
  1. 输入域名时,前台根据设定好的模块信息进行跳转到相应的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'];
    }
发布了68 篇原创文章 · 获赞 0 · 访问量 1745

猜你喜欢

转载自blog.csdn.net/qj4865/article/details/104484664