4权限管理+会员管理+专业和课程模块+购买课程
在线教育平台
1. 权限管理
1.1.1 后台首页使用模型关系输出当前登录管理员的角色名称
 
效果:
 
1.1 输出当前管理员的权限菜单
控制器:
 
视图:
 
效果:
 
1.2 使用中间件实现管理员权限的防FQ功能
创建一个checkAdminAuth中间件,用于检测当前管理员是否拥有操作对应控制器方法的权限。
命令行:
 
把中间件注册到项目中
 
在路由中使用中间件
 
中间件检测当前管理员的权限
 
2. 会员管理
我们直接参考管理员的CURD来实现
2.1 创建会员的资源控制器
 
把Admin\AdminController的代码全部复制过来
修改一下
- 把“AdminController” 改成“MemberController”
- 去掉“use App\Models\Role;”
- 把“App\Models\Admin” 改成 “App\Models\Member”
- 把“管理员”全部替换成“会员”
- 把“admin.admin”改成“admin.member”
- 把“Admin $admin”改成“Member $member”
- 把“unique:admin”改成“unique:member”
- 把“$admin”改成“$member”
- 去掉“->with('role')”
- 去掉“, Role $role”
- 去掉“ $data['roleList'] = $role->get();”
- 把“adminInfo”改成“memberInfo”
- 把“role_id” 改成“type_id”
2.2 创建会员的相关路由
 
2.3 创建会员的模型
2.3.1 数据迁移
 
代码:
 
2.3.1.1 执行数据迁移
 
效果:
 
2.3.2 创建模型
 
把管理员Admin模型的代码,复制一份给会员Member模型,代码:
 
2.3.3 数据填充种子
 
代码:
 
执行数据填充种子
 
2.4 显示会员列表
把管理员的列表页视图文件复制到会员目录中
 
修改如下
- 把“管理员”改成“会员”
- 把“admin/admin”修改成“admin/member”
3. 专业和课程模块
3.1 专业分类
3.1.1 创建资源控制器和资源路由
 
把Admin\AdminController的代码复制给专业分类Admin\ProfessionCateController,代码:
修改一下
- 把“AdminController” 改成“ProfessionCateController”
- 去掉“use App\Models\Role;”
- 把“App\Models\Admin” 改成 “App\Models\Member”
- 把“管理员”全部替换成“专业分类”
- 把“admin.admin”改成“admin.professioncate”
- 把“Admin $admin”改成“ProfessionCate $professioncate”
- 把“unique:admin”改成“unique:professioncate”
- 把“$admin”改成“$professioncate”
- 去掉“->with('role')”
- 去掉“, Role $role”
- 去掉“ $data['roleList'] = $role->get();”
- 把“adminInfo”改成“professioncateInfo”
- 去掉“role_id”
- 把“username”改成“cate_name”
3.1.2 创建专业分类的相关路由
 
3.1.3 创建模型和数据表
3.1.3.1 使用数据迁移创建专业课程模块的数据表
 
4个数据表的数据迁移代码:
 
3.1.3.2 执行数据迁移
 
效果:
 
3.1.4 展示专业分类列表
因为我们在创建权限的时候,专业分类的地址名为 profession_cate,后面我们创建专业份额里的路由地址为 professioncate,所以路由出问题了。因此我们需要修改权限的。
数据填充种子文件:
 
重新执行权限的数据填充种子文件。
 
访问后台的菜单显示效果如下:
 
接下来,我们把管理员的列表页视图复制到专业分类的视图目录下
 
再次访问专业分类列表,显示效果如下;
 
接下来,修改专业分类的列表页视图,代码。
修改如下:
- 把“管理员”改成“专业分类”
- 把“admin/admin”改成“admin/professioncate”
- 修改表格的表头
   
- 把“admin_”改成“professioncate_”
- 修改datatable的排序字段列
   
完成上面的修改工作以后,访问专业分类的列表页,效果:
 
表示我们并没有创建模型。所以我们需要专业分类的模型。
 
代码:
直接复制Admin管理员模型模型的代码到专业分类的模型中。
 
创建了模型以后,继续访问专业分类,报错如下:
 
通过错误显示,找到ProfessionCateController的195行:
 
再次,访问:
 
没有报错,但是没有数据,所以我们使用数据填充种子填充数据。
3.1.5 创建数据填充种子文件
 
代码:

执行数据填充中心文件
 
再次访问,专业分类:
 
3.1.6 专业分类的添加
访问专业分类的页面,报错如下:
 
我们找到页面对应的控制器Admin\ProfessionCateController@create方法中,参数里面引入了Role模型,但是我们不需要,所以去掉。
 
修改如下:
 
再次访问添加专业分类,错误如下:
 
把管理员的添加视图复制一份,粘贴到 专业分类的视图目录中。
 
再次访问添加专业分类页面,错误如下:
 
视图中,使用了未定义的变量 roleList,所以我们需要调整添加视图页面的代码:
修改如下:
- 把“管理员”改成“专业分类”
- 把“admin/admin”改为“admin/professioncate”
- 把“avatar”改为“logo”
- 修改表单的name值为professioncate表的字段名
- 把“form-admin”改成“form-professioncate”
代码:
 
效果:
 
3.1.7 控制器接收数据并保存
代码:
 
效果:
 
我们可以把列表页的中间封面图改成图片显示。
 
效果:
 
3.2 专业管理
3.2.1 创建资源控制器和资源路由
命令行:
 
代码:
直接把管理员的控制器代码复制过来。修改如下:
- 把“AdminController” 改成“ProfessionController”
- 去掉“use App\Models\Role;”
- 把“App\Models\Admin” 改成 “App\Models\Profession”
- 把“管理员”全部替换成“专业”
- 把“admin.admin”改成“admin.profession”
- 把“Admin $admin”改成“Profession $profession”
- 把“unique:admin”改成“unique:profession”
- 把“$admin”改成“$profession”
- 去掉“->with('role')”
- 去掉“, Role $role”
- 去掉“ $data['roleList'] = $role->get();”
- 把“adminInfo”改成“professionInfo”
- 去掉“role_id”
- 把“username”改成“cate_name”
3.2.2 修改完成以后,创建专业相关的路由
路由代码:
 
3.2.3 创建专业模型
我们之前已经使用数据迁移把专业表创建好了,所以接下来我们只需要创建对应的专业模型即可。
命令行:
 
代码:
直接把管理员的模型代码复制过来。
纠正, 我们的专业和专业分类是没有登录功能的,所以我们的模型不需要开启支持Auth类的使用。
模型代码:

3.2.4 显示专业列表
访问专业列表,错误如下
 
表示找到列表页的视图,所以我们把管理员的列表视图复制到专业的视图目录中。
 
访问效果:
 
3.2.4.1 修改专业列表的视图
修改如下:
- 把“管理员”改成“专业”
- 把“admin/admin”改成“admin/profession”
- 修改表格的表头
   
- 把“admin_”改成“profession_”
- 修改datatable的排序字段列
   
再次访问专业列表,错误如下;
 
上面表示在Admin\ProfessionController@ajax_list方法中194行报错。
修改如下;
 
修改完成以后,访问专业列表效果如下:
 
上面表示我们并没有专业的数据,所以我们使用数据填充种子,生成测试数据。
3.2.4.2 创建数据填充种子文件
 
代码:
 
执行数据填充种子文件
 
再次访问专业列表,效果如下:
 
调整表格
 
效果:
 
3.2.5 添加专业
访问添加专业页面,报错如下:
 
修改Admin\ProfessionController@create方法:
把“Role $role”删除
代码:
 
再次访问添加专业页面:
 
把管理员AdminController的添加页面视图复制专业视图目录中
 
再次访问添加专业的页面,报错:
 
修改添加专业的视图:
修改如下:
- 把“管理员”改成“专业”
- 把“admin/admin”改为“admin/profession”
- 修改表单的name值为profession表的字段名
- 把“form-admin”改成“form-profession”
代码:
 
效果:
 
3.2.5.1 点击专业分类的输入框,弹出一个选择专业的页面,供我们进行遴选。
分析:
1. 点击弹出新的layer页面
2. 在新弹出页面中,可以供管理员选择对应的专业分类,在对应的专业分类中,可以输出对应分类信息
3. 点击对应行的分类信息以后,就会自动把分类名称,显示添加专业的表单中。
3.2.5.1.1 点击弹出新的layer页面
代码:
 
效果:
 
提示权限不足,权限不足的原因是因为我们之前做了权限的防FQ,所以我们把这个页面设置一个路由,并在对应控制器ProfessionController中创建一个方法select_cate。
路由代码:

控制器方法:
 
这里我们可以把专业分类的列表页面,复制一份到专业视图目录中
 
修改选择专业分类的视图代码:
 

效果:
 
接下来,因为我们最终保存到数据库中的是分类ID,所以我们需要调整 添加专业的表单页面。
添加专业的视图代码:
 
选择专业分类视图代码:
 

效果:
 
优化细节,当管理员点选了专业分类以后,自动关闭当前弹窗。
 
3.2.5.2 点击授课老师的输入框,弹出一个选择老师的页面,供我们进行遴选。
分析:
1. 点击弹出新的layer页面
2. 在新弹出页面中,可以供管理员选择对应的老师
3. 点击对应行的老师信息以后,就会自动把老师名称,显示到添加专业的表单中。
3.2.5.2.1 修改添加专业的表单
 
3.2.5.2.2 显示选择老师的页面
 
3.2.5.2.3 在ProfessionController创建一个选择老师的方法
 
接下来,会员列表的视图文件复制一份专业的视图目录中。
 
效果:

上面这里弹出窗口里面,是会员列表,但是里面不仅显示了老师的信息,还有学生的信息。所以,我们可以修改下MemberController中的ajax_list方法,允许查询会员信息的时候,可以根据条件只显示老师的。
选择老师的视图
 
Admin\MemberController控制器
 
效果:
 
接下来,我们继续调整老师的列表信息
 
 


最终效果:
 
3.2.5.3 在控制器接收添加的专业数据
控制器,代码:
 
效果:
 
3.2.6 完善细节1:显示老师的名字,而不是编号
控制器:
 
视图:
 
4. 购买课程
- 显示前台首页的数据[ 显示专业信息 ]
- 点击专业信息跳转专业详情
- 点击“立即报名”,生成购买专业的确认下单
- 点击“提交订单”,生成订单信息
验证用户是否登录,如果没有登录,则直接跳转到登录页面
登录则生成订单信息,进入立即支付页面
- 点击立即支付,显示微信支付的二维码
- 当用户通过手机进行微信支付以后
我们需要实时监控,用户是否已经支付成功了。
如果支付成功,则关闭二维码,并进行页面跳转,跳转到会员中心。
4.1 显示前台首页的数据[ 显示专业信息 ]
4.1.1 创建首页控制器
命令行:
 
代码:
 
4.1.2 声明路由地址
 
接下来,把首页和专业详情页面全部复制到项目中,Home\IndexController的视图目录中。
 
4.1.3 加载项目前台的静态资源
 
访问前台首页,效果如下:
 
调整首页视图:
- 把“img="/img/” 修改 img="{{ asset('home') }}/img/
- 把“url('/img/” 修改 “url('{{ asset('home') }}/img/”
- 把“href="/css” 修改 “href="{{ asset('home') }}/css”
- 把“src="/js/” 修改 “src="{{ asset('home') }}/js/”
- 把“img src="/img” 修改 “img src="{{ asset('home') }}/img”
效果:
 
4.2 显示专业信息
 
我们这里显示两层,所以把中间的内容去掉。
 
`效果;
 
4.3 控制器查询所有的专业分类,和所有的专业信息
控制器代码:
 
视图,代码:
显示所有的专业分类信息
 
默认显示所有的专业信息
因为老师是需要输出老师的名称的,所以我们需要在显示数据之前,需要把老师的信息查询出来。
控制器,代码:
 
视图,代码:
 
效果:
 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号