### 初始化
[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)將學生的相關信息賦值給模板視圖變量。
這樣,無論我們訪問學生模板的任何方法,都會在視圖中顯示學生的信息,如下圖所示:

(ps:這里的頭像我們使用了默認的頭像,當然也可以在賬戶設置中添加上傳頭像的功能,將圖片路徑保存到Student中即可)
>[info] 模板中的視圖變量往往在整個模塊中都有效,所以最適合在初始化方法中賦值。