### 初始化 [TOC=4,6] ThinkPHP5提供了更简便的模块初始化操作,在以往的版本您需要首先定义一个本控制器的父类,然后在父类中定义初始化操作,而现在,您只需要在模块的当前控制器中写一个初始化的方法,就可以完成初始化操作了。具体到我们的项目,我们需要在学生模块的每个界面均显示学生的信息。所以这个操作可以交给模块的初始化方法来完成。 >[warning] 无论访问该控制器下的哪个方法,都会首先运行初始化方法。 学生模块的所有控制器方法都位于 application/index/controller/student.php文件中,其初始化控方法代码如下: #### 初始化代码 ~~~ namespace app\index\controller; use think\Controller; use app\model\Student as StuModel; use app\model\Task as TaskModel; use app\model\Submit as SubmitModel; use think\Request;//用于Session读取 use think\Session; class Student extends Controller{ public function _initialize() { $request=$this->request; //初始化的时候检查 用户权限 if(null==$request->session('stuno')||$request->session('stuno')=='') { $this->error("您没有该页的访问权限!",url('./account/login')); exit; }else { $stuno=$request->session('stuno'); $stu=StuModel::get(['stu_no'=>$stuno]); $this->stuid=$stu['stu_id']; $this->new_task_number=$stu['new_task_number']; $this->assign('stuid',$stu['stu_id']); $this->assign('stuno',$stu['stu_no']); $this->assign('stuname',$stu['stu_name']); //左侧默认无active菜单 $this->assign('index',''); $this->assign('newtasks',''); $this->assign('account',''); $this->assign('num',$this->new_task_number); } } ~~~ #### 代码分析 1、检查用户权限,拒绝非法登录 当用户通过登录界面登录系统后会在Session中存放响应的用户身份标识,在初始化程序中要检测相应的标识是否存在。 >[warning] 在ThinkPHP以前的版本中,可以通过$_SESSION直接操作Session变量,而在ThinkPHP5中为了安全起见将Session封装在了请求对象Request中,所以需要通过实例化Request来操作Session。更过关于Session的用法请参看官方教程。 2、给模板参数复制 前面讲到过,Student模块会用到视图模板,模板变量的变量是需要在初始化的时候进行赋值的,比如学生的信息和未完成作业的数量。还需要将菜单的选中状态都设置为未选中。设置模板参数中学生信息的过程如下: (1)通过Session中保存的学号信息查询学生 (2)将学生的相关信息赋值给模板视图变量。 这样,无论我们访问学生模板的任何方法,都会在视图中显示学生的信息,如下图所示: ![](https://box.kancloud.cn/ef515b21cde0444851be1b43acc700e3_299x208.png) (ps:这里的头像我们使用了默认的头像,当然也可以在账户设置中添加上传头像的功能,将图片路径保存到Student中即可) >[info] 模板中的视图变量往往在整个模块中都有效,所以最适合在初始化方法中赋值。