99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學院 頭像
蘋果6袋
6
麥子學院

Yii2框架學習之過濾器behaviors()行為調用詳解

發(fā)布時間:2016-12-21 15:44  回復:0  查看:3191   最后回復:2016-12-21 15:44  
Yii2框架開發(fā) 中,使用行為(behavior)可以在不修改現(xiàn)有類的情況下,對類的功能進行擴充。 通過將行為綁定到一個類,可以使類具有行為本身所定義的屬性和方法,就好像類本來就有這些屬性和方法一樣。 而且不需要寫一個新的類去繼承或包含現(xiàn)有類。
  Yii中的行為,其實是 yii\base\Behavior 類的實例, 只要將一個Behavior實例綁定到任意的 yii\base\Component 實例上, 這個Component就可以擁有該Behavior所定義的屬性和方法了。而如果將行為與事件關聯(lián)起來,可以玩的花樣就更多了。
  在Yii2的幾乎每個controller中,我們都會看到一個函數behaviors(),通常,我們用這個函數來配置控制器的權限,例如:
  /**
  * 行為過濾器(beforeAction,afterAction)
  * @author wangying
  * @override 方法重寫
  * @return array
  */public function behaviors(){
  return [
  'access' => [
  'class' => AccessControl::className(),//過濾器
  'rules' => [
  [
  'actions' => ['login', 'error','index'],
  'allow' => true,
  ],
  [
  'actions' => ['logout'],
  'allow' => true,
  'roles' => ['@'],
  ],
  ],
  ],
  'verbs' => [
  'class' => VerbFilter::className(),//過濾器
  'actions' => [
  'logout' => ['post'],
  ],
  ],
  ];
  }
  注意代碼中加亮的兩行,這里調用的類,我們都稱之為過濾器。在controller中調用過濾器,可以控制當前controller中的所有action,我們也可以在模塊(module)或是應用主體中調用,來控制整個模塊或是整個應用。
  Yii2提供了如下過濾器:
  AccessControl
  ContentNegotiator
  Cors
  HttpCache
  PageCache
  RateLimiter
  AuthMethod
  模仿這些過濾器,我們也可以開發(fā)自己的過濾器。
  還是把測試的過濾器放到app/base/filters里,新建文件TestFilter.php
  namespace app\base\filters;use Yii;use yii\base\Action;use yii\base\ActionFilter;class TestFilter extends ActionFilter{
  //在action之前運行,可用來過濾輸入
  public function beforeAction($action)
  {
  echo '在調用action前顯示';
  return TRUE;//如果返回值為false,則action不會運行
  }
  //在action之后運行,可用來過濾輸出
  public function afterAction($action, $result)
  {
  return $result.'在調用action后顯示';//可以對action輸出的$result進行過濾,retun的內容會直接顯示
  }
  }
  然后新建 文件app/controller/TestController.php
  namespace frontend\controllers;
  use yii\web\controller;class TestController extends Controller {
  public function behaviors() {
  return [
  'test' => [
  'class' => app\base\filters\TestFilter'//調用過濾器
  ]
  ];
  }
  public function actionFilter() {
  return '當前action顯示';//返回的內容會遞交給過濾器,由afterAction進行處理
  }
  }
  最后,測試顯示結果為:
  在調用action前顯示
  當前action顯示
  在調用action后顯示

來源:塵埃
您還未登錄,請先登錄

熱門帖子

最新帖子

?