過濾器是一段**,可被配置在控制器動作執行之前或之後執行。例如, 訪問控制過濾器將被執行以確保在執行請求的動作之前使用者已通過身份驗證;效能過濾器可用於測量控制器執行所用的時間。
乙個動作可以有多個過濾器。過濾器執行順序為它們出現在過濾器列表中的順序。過濾器可以阻止動作及後面其他過濾器的執行。
過濾器有兩種寫法:
無論哪種過濾器,都必須在控制器中重寫控制器的public function filters()方法,設定哪個過濾器對哪個動作起作用。
編寫基於方法的過濾器,要經過三步:
在控制器中編寫動作(action);
在控制器中編寫過濾器函式,函式名必須以filter為字首,如:function filteraccesscontrol();
重寫父類ccontroller的filters()方法,定義過濾器與動作的關係;
例項:[php]view plain
copy
print?
<?php
class usercontroller extends ccontroller
/**
* 第二步:建立基於方法的過濾器
*/public
function filteraddfilter($filterchain)
/**
* 第三步:重寫父類ccontroller的filters()方法,定義過濾器與動作的關係
* @see ccontroller::filters()
*/public
function filters()
}
自定義過濾器類,需要單獨寫乙個過濾器類,並繼承cfilter類,重寫cfilter類下的部分方法。大家可以看一下cfilter類的**,該類**不多,還是很容易看懂的。
自定義過濾器例項:
[php]view plain
copy
print?
<?php
class testfilter extends cfilter
/*** performs the post-action filtering.
* @param cfilterchain $filterchain the filter chain that the filter is on.
*/protected
function postfilter($filterchain)
} 在控制器中註冊該自定義過濾器與動作的繫結關係:
/**
[php]view plain
copy
print?
* 第三步:重寫父類ccontroller的filters()方法,定義過濾器與動作的關係
* @see ccontroller::filters()
*/
ublic function filters(){
return
array(
//定義過濾器與動作的關聯關係
'addfilter + add',
array(
),
);
我自定義了乙個過濾器:testfilter,繼承了cfilter類,重寫了cfilter類的兩個主要方法:prefilter(前控制器,在動作執行前執行)和postfilter(後控制器,在動作執行後執行)。
假設我將上面編寫的自定義過濾器類與動作actionadd繫結,那麼,自定義過濾器繼承自父類cfilter兩個方法:prefilter和postfilter,與繫結的actionadd之間的執行順序是怎樣的呢?
經過試驗,執行順序為:cfilter::prefilter--------->usercontroller::actionadd--------->cfilter::
postfilter。
也就是說,在動作執行前後都可以執行過濾操作。
那麼文章開頭說「過濾器可以阻止動作及後面其他過濾器的執行」是怎麼做到的呢?
看了cfilter::
prefilter的官方注釋就知道了:
[php]view plain
copy
print?
@return boolean whether the filtering process should continue
and the action should be executed。
cfilter::
prefilter函式預設return true;即,預設執行後面的動作和後過濾器。如果在自定義過濾器類中,重寫cfilter::
prefilter方法,並return false;就可以阻止後面的動作和過濾器執行了!
自定義過濾器類的執行過程我們搞清楚了,那麼過濾器函式呢?過濾器函式沒有前和後之分,只有乙個,那麼它肯定是執行的,經過試驗,過濾器函式相當於自定義過濾器類中的前過濾器,即過濾器函式在繫結的動作之前執行。
最後乙個問題,如果有個過濾器函式和自定義過濾器類都繫結同乙個動作,那麼過濾器的執行順序是什麼樣子的呢?經過試驗,結果如下:
vue filter過濾器用法
vue.js 允許你自定義過濾器,可被用於一些常見的文字格式化。過濾器可以用在兩個地方 雙花括號插值和v bind表示式 後者從 2.1.0 開始支援 div v bind id rawid formatid div 1 在乙個元件的選項中定義本地的過濾器 filters 2 在建立 vue 例項之...
vue框架過濾器定義與使用
塊 text v model msg vue.filter guolv function msg var vm newvue methods filters 總結 1 全域性過濾器定義在最前面,最好在vue例項前,否則會報錯。2 全域性過濾器使用 前面是資料,後面是過濾器名稱。3 可以加入引數,如 ...
過濾器詳解
過濾器詳解 注 繼承介面的過濾器需要先繼承 filterattribute類才行 過濾器頭部 attributeusage attributetargets.method,allowmultiple true,inherited true 1 validon使用按位 或 運算子組合的一組值,用於指示...