thinkphp5 第15课:项目案例-学生列表-控制器中的代码

在index模块,新建student控制器

部分代码参考如下:

<?php

namespace app\index\controller;


use app\common\controller\AdminBase;
use think\Db;
use think\exception\PDOException;

/**
 * 学生控制器
 * 主要实现学生的添加、修改、删除、显示
 */
class Student extends AdminBase
{


    //显示所有学生列表
    public function all()
    {
        //select方法,返回二维数组
        $data = Db::name('student')->select();

        $this->assign('student', $data);
        return $this->fetch();
    }

   

}

从上面的代码中,我们会发现,Student类并没有继承Controller,而是继承了AdminBase类

AdminBase类是我们自定义一个控制器类,它在common模块中

AdminBase控制器类的代码如下:

<?php


namespace app\common\controller;


use think\Controller;
use think\Request;
use think\Session;

class AdminBase extends Controller
{
    function __construct(Request $request = null)
    {
        parent::__construct($request);
        if(!Session::has('admin')){
            $this->error('请先登录,然后操作','index/index/index');
        }
    }

}

最终AdminBase控制器,还是继承了Controller

根据继承的传递性,Student控制器最终也继承了Controller

那么,为什么要写一个AdminBase类呢?

我们是这样考虑的,在这个学生管理系统中,除了登录页面不需要判断是否已经登录外,其他所有页面都要首先判断是否已经正常登录,否则不允许操作数据

所以,我们在构造方法中,使用了会话管理:Session::has() 来判断 "admin" 的存在性。如果不存在“admin",说明还未正常登录,强制跳转到登录页面

 

有关Session的详见操作,参见:tp5完全开发手册“杂项-session”

php在继承父类时,构造方法的使用非常特殊,子类如果有了自己的构造方法,就不会执行父类的构造方法,但是,在tp5系统中,必须执行Controller中的构造方法,所以我们就必须执行:

parent::__construct($request);

显示的执行父类的构造方法

在Student类的all()方法中,我们使用

$data = Db::name('student')->select();

对数据表student进行查询,返回所有记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李 书 明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值