91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Yii 2 —— Backend自動出現登錄頁

發布時間:2020-07-14 19:11:02 來源:網絡 閱讀:2802 作者:tywali 欄目:開發技術

1.1  Backend自動出現登錄頁

http://backend/訪問后端時,頁面會自動被重定向到http://backend/index.php?r=site%2Flogin,要求進行登錄,這其中的流程是怎樣的?

 

按照YII的理念,框架在處理http://backend/這種鏈接時,首先要找到默認的controller,然后再找默認的action

1.1.1  獲取默認controller

backend應用的最初入口文件:index.php中,有如下代碼:

(new yii\web\Application($config))->run();

 

可以知道,application的入口文件是:

%yii-application%\vendor\yiisoft\yii2\web\Application.php

 

打開該文件,找到$defaultRoute的定義:

public $defaultRoute = 'site';

 

因此,可以確定默認的controller就是siteController

1.1.2  獲取默認action

對于YII框架,控制器的默認actionactionIndex,但是在這個action被執行之前,會根據controller所配置的過濾器,先執行過濾器的代碼,如果過濾器的執行結果導致action不被執行,則也沒有獲取默認action的必要了。所以首先要看siteController的過濾器是怎樣配置的。

1.1.3  SiteController的過濾器

根據YII2框架,controller中的過濾器實際上是一些behavior,被配置為在action之前或之后執行,用來做一些必要的檢查和設置等工作。對于backend應用來說,一般都需要登錄,所以有必要在action被執行之前,檢查一下用戶是否登錄,這時,就用得上過濾器了。

 

siteController的過濾器配置如下:

public function behaviors()
 {
    
return [
        
'access' => [
            
'class' => AccessControl::className(),
            
'rules' => [
                 [
                    
'actions' => ['login', 'error'],
                    
'allow' => true,
                
],
                
[
                    
'actions' => ['logout', 'index'],
                    
'allow' => true,
                    
'roles' => ['@'],
                
],
            
],
        
],
        
'verbs' => [
            
'class' => VerbFilter::className(),
            
'actions' => [
                
'logout' => ['post'],
            
],
        
],
    
];
 
}

 

在上述代碼中看到配置的第一個過濾器是access,這個過濾器是YII2內置的過濾器,用來實現訪問控制,這里配置了兩條rule,其中第二條rule控制了index這個action,其中roles => [‘@’],表示只有登錄用戶才能執行actionIndex,而當前用戶還沒有登錄,所以是不能執行indexAction的,于是請求被轉到user這個model來處理。

 

為什么要把請求轉到user這個model來處理?因為在不同的系統中,對于登錄的邏輯處理是不一樣的,框架中需要將這些邏輯交給用戶來自己處理,而YII框架中,業務邏輯是放在model中的,所以最后由user這個model來處理。

 

為什么model名稱是user?看AccessControl類的定義:

public $user = 'user';

在這里定義了model的名稱,在init()函數中將model實例化。

 

關于user這個model的位置,它并沒有被放在backendmodel目錄下,而是被放在了與backend平級的common目錄下,是因為有可能前端應用也需要登錄,很多時候,在一個系統中,登錄的邏輯都是一樣的。

 

最終,在user這個modelloginRequired函數中,執行了一個重定向,將鏈接重定向到$loginUrl所指向的地址,而這個變量的值,就是:

public $loginUrl = ['site/login']

 

所以,頁面就跳轉到登錄頁面了。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

舒兰市| 漳平市| 灵川县| 衡阳市| 大新县| 定襄县| 古交市| 玉溪市| 安溪县| 天水市| 杂多县| 金昌市| 南召县| 宁河县| 临邑县| 西青区| 邵武市| 邻水| 交口县| 林州市| 那曲县| 永顺县| 金平| 饶阳县| 襄樊市| 广德县| 如东县| 贵州省| 白河县| 酒泉市| 宜良县| 扶绥县| 蒙山县| 静安区| 高淳县| 阳原县| 昭通市| 巴彦县| 阿合奇县| 万山特区| 茌平县|