国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

YII Framework的filter過濾器用法分析,yiifilter_PHP教程

php中文網(wǎng)
發(fā)布: 2016-07-12 08:55:16
原創(chuàng)
964人瀏覽過

yii framework的filter過濾器用法分析,yiifilter

本文實例講述了yii framework的filter過濾器用法。分享給大家供大家參考,具體如下:

首先看官方給出的說明文檔,什么是過濾器,過濾器的作用,過濾器的規(guī)則,過濾器的定義方法等等。

然后對過濾器進行一個總結。

http://www.yiiframework.com/doc/guide/1.1/zh_cn/basics.controller

過濾器是一段代碼,可被配置在控制器動作執(zhí)行之前或之后執(zhí)行。例如, 訪問控制過濾器將被執(zhí)行以確保在執(zhí)行請求的動作之前用戶已通過身份驗證;性能過濾器可用于測量控制器執(zhí)行所用的時間。

立即學習PHP免費學習筆記(深入)”;

一個動作可以有多個過濾器。過濾器執(zhí)行順序為它們出現(xiàn)在過濾器列表中的順序。過濾器可以阻止動作及后面其他過濾器的執(zhí)行

過濾器可以定義為一個控制器類的方法。方法名必須以 filter 開頭。例如,現(xiàn)有的 filterAccessControl 方法定義了一個名為 accessControl 的過濾器。 過濾器方法必須為如下結構:

public function filterAccessControl($filterChain)
{
  // 調用 $filterChain->run() 以繼續(xù)后續(xù)過濾器與動作的執(zhí)行。
}

登錄后復制

其中的 $filterChain (過濾器鏈)是一個 CFilterChain 的實例,代表與所請求動作相關的過濾器列表。在過濾器方法中, 我們可以調用 $filterChain->run() 以繼續(xù)執(zhí)行后續(xù)過濾器和動作。

過濾器也可以是一個 CFilter 或其子類的實例。如下代碼定義了一個新的過濾器類:

class PerformanceFilter extends CFilter
{
  protected function preFilter($filterChain)
  {
    // 動作被執(zhí)行之前應用的邏輯
    return true; // 如果動作不應被執(zhí)行,此處返回 false
  }
  protected function postFilter($filterChain)
  {
    // 動作執(zhí)行之后應用的邏輯
  }
}

登錄后復制

要對動作應用過濾器,我們需要覆蓋 CController::filters() 方法。此方法應返回一個過濾器配置數(shù)組。例如:

class PostController extends CController
{
  ......
  public function filters()
  {
    return array(
      'postOnly + edit, create',
      array(
        'application.filters.PerformanceFilter - edit, create',
        'unit'=>'second',
      ),
    );
  }
}

登錄后復制

上述代碼指定了兩個過濾器: postOnly 和 PerformanceFilter。 postOnly 過濾器是基于方法的(相應的過濾器方法已在 CController 中定義); 而 performanceFilter 過濾器是基于對象的。路徑別名application.filters.PerformanceFilter 指定過濾器類文件是protected/filters/PerformanceFilter。我們使用一個數(shù)組配置 PerformanceFilter ,這樣它就可被用于初始化過濾器對象的屬性值。此處 PerformanceFilter 的 unit 屬性值將被初始為 second。

使用加減號,我們可指定哪些動作應該或不應該應用過濾器。上述代碼中, postOnly 應只被應用于 edit 和create 動作,而 PerformanceFilter 應被應用于 除了 edit 和 create 之外的動作。 如果過濾器配置中沒有使用加減號,則此過濾器將被應用于所有動作。

過濾器功能:

用于對訪問者和數(shù)據(jù)的過濾和對訪問操作的記錄

使用方法:

一作為controller的一個方法。方法名以filter開頭。

public function filterAccessControl($filterChain)
{ 
echo "--->filterAccessControl";
  $filterChain->run();
}

登錄后復制

二定義對立的filter類,要求extends CFilter。

CFilter

<&#63;php 
/** 
 * CFilter is the base class for all filters. 
 * 
 * A filter can be applied before and after an action is executed. 
 * It can modify the context that the action is to run or decorate the result that the 
 * action generates. 
 * 
 * Override {@link preFilter()} to specify the filtering logic that should be applied 
 * before the action, and {@link postFilter()} for filtering logic after the action. 
 * 
 * @author Qiang Xue <qiang.xue@gmail.com> 
 * @version $Id: CFilter.php 2799 2011-01-01 19:31:13Z qiang.xue $ 
 * @package system.web.filters 
 * @since 1.0 
 */ 
class CFilter extends CComponent implements IFilter 
{ 
  /** 
   * Performs the filtering. 
   * The default implementation is to invoke {@link preFilter} 
   * and {@link postFilter} which are meant to be overridden 
   * child classes. If a child class needs to override this method, 
   * make sure it calls $filterChain->run() 
   * if the action should be executed. 
   * @param CFilterChain $filterChain the filter chain that the filter is on. 
   */ 
  public function filter($filterChain) 
  { 
    if($this->preFilter($filterChain)) 
    { 
      $filterChain->run(); 
      $this->postFilter($filterChain); 
    } 
  } 
  /** 
   * Initializes the filter. 
   * This method is invoked after the filter properties are initialized 
   * and before {@link preFilter} is called. 
   * You may override this method to include some initialization logic. 
   * @since 1.1.4 
   */ 
  public function init() 
  { 
  } 
  /** 
   * Performs the pre-action filtering. 
   * @param CFilterChain $filterChain the filter chain that the filter is on. 
   * @return boolean whether the filtering process should continue and the action 
   * should be executed. 
   */ 
  protected function preFilter($filterChain) 
  { 
    return true; 
  } 
  /** 
   * Performs the post-action filtering. 
   * @param CFilterChain $filterChain the filter chain that the filter is on. 
   */ 
  protected function postFilter($filterChain) 
  { 
  } 
}

登錄后復制

下面舉例說明兩種filter規(guī)則的使用:

SiteController.php

<&#63;php 
class SiteController extends Controller 
{ 
  public function init() 
  { 
    //$this->layout='mylayout'; 
  } 
  public function filters() 
    { 
      return array( 
        'AccessControl - create', 
        array( 
          'application.filters.MyFilter + create', 
        ), 
      ); 
  } 
  public function filterAccessControl($filterChain) 
  {     
      echo "--->filterAccessControl"; 
      $filterChain->run(); 
  } 
  public function actionCreate() { 
    echo "--->create action"; 
  } 
  public function actionPrint() { 
    echo "--->print action"; 
  } 

登錄后復制

/www/yii_dev/testwebap/protected# tree
.
├── commands
│?? ├── shell
│?? ├── TestCommand.php
│?? └── TestCommand.php~
├── components
│?? ├── Controller.php
│?? └── UserIdentity.php
├── config
│?? ├── console.php
│?? ├── main.php
│?? └── test.php
├── controllers
│?? ├── post
│?? │?? └── UpdateAction.php
│?? ├── SiteController.php
│?? ├── TestTestController.php
│?? └── UserController.php
├── filters
│?? └── MyFilter.php
?MyFilter.php

<&#63;php 
class MyFilter extends CFilter 
{ 
  protected function preFilter ($filterChain) 
  { 
    // logic being applied before the action is executed     
    echo "-->MyFilter-->pre"; 
    return true; // false if the action should not be executed 
  } 
  protected function postFilter ($filterChain) 
  { 
    echo "-->MyFilter-->post"; 
  } 
} 

登錄后復制

http://www.localyii.com/testwebap/index.php?r=site/print

--->filterAccessControl--->print action

http://www.localyii.com/testwebap/index.php?r=site/create

-->MyFilter-->pre--->create action-->MyFilter-->post

public function filters()
{
  return array(
    'AccessControl - create',
    array(
      'application.filters.MyFilter + create,print',
    ),
  );
}

登錄后復制

http://www.localyii.com/testwebap/index.php?r=site/print
--->filterAccessControl-->MyFilter-->pre--->print action-->MyFilter-->post

以上可以看到filter的具體執(zhí)行流程。

在filters中有-、+
具體功能是
+表示僅僅作用于這一些action
-后邊跟action名稱列表。表示排除在外。
如果沒有-、+則會應用的所有的action

更多關于Yii相關內容感興趣的讀者可查看本站專題:《Yii框架入門及常用技巧總結》、《php優(yōu)秀開發(fā)框架總結》、《smarty模板入門基礎教程》、《php日期與時間用法總結》、《php面向對象程序設計入門教程》、《php字符串(string)用法總結》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》

希望本文所述對大家基于Yii框架的PHP程序設計有所幫助。

您可能感興趣的文章:

  • 簡介PHP的Yii框架中緩存的一些高級用法
  • 深入解析PHP的Yii框架中的緩存功能
  • PHP的Yii框架中View視圖的使用進階
  • PHP的Yii框架中Model模型的學習教程
  • 詳解PHP的Yii框架中的Controller控制器
  • Yii數(shù)據(jù)庫緩存實例分析
  • Yii開啟片段緩存的方法
  • 詳解PHP的Yii框架中組件行為的屬性注入和方法注入
  • 詳解在PHP的Yii框架中使用行為Behaviors的方法
  • YII Framework學習之request與response用法(基于CHttpRequest響應)

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1117063.htmlTechArticleYII Framework的filter過濾器用法分析,yiifilter 本文實例講述了YII Framework的filter過濾器用法。分享給大家供大家參考,具體如下: 首先看官方給...
PHP速學教程(入門到精通)
PHP速學教程(入門到精通)

PHP怎么學習?PHP怎么入門?PHP在哪學?PHP怎么學才快?不用擔心,這里為大家提供了PHP速學教程(入門到精通),有需要的小伙伴保存下載就能學習啦!

下載
來源:php中文網(wǎng)
本文內容由網(wǎng)友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權的內容,請聯(lián)系admin@php.cn
最新問題
開源免費商場系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關于我們 免責申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓,幫助PHP學習者快速成長!
關注服務號 技術交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學習
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://www.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號