過濾器
過濾器是控制器動作執行之前或之後執行的物件。例如存取控制過濾器可在動作執行之前來控制特殊終端使用者是否有權限執行動作, 內容壓縮過濾器可在動作執行之後發給終端使用者之前壓縮回應內容。 (建議學習:yii框架)
過濾器可包含預過濾(過濾邏輯在動作之前)或後過濾(過濾邏輯在動作之後), 也可同時包含兩者。
使用過濾器
過濾器本質上是一類特殊的 行為, 所以使用過濾器和 使用行為一樣。可以在控制器類別中覆寫它的behaviors() 方法來宣告過濾器,如下所示:
public function behaviors() { return [ [ 'class' => 'yii\filters\HttpCache', 'only' => ['index', 'view'], 'lastModified' => function ($action, $params) { $q = new \yii\db\Query(); return $q->from('user')->max('updated_at'); }, ], ]; }
控制器類別的過濾器預設套用到該類別的所有動作, 你可以設定only 屬性明確指定控制器應用到哪些動作。在上述例子中,HttpCache 過濾器只套用到 index 和 view 動作。也可以配置 except 屬性 使一些動作不執行過濾器。
除了控制器外,可在 模組或套用主體 中申明過濾器。申明之後,過濾器會套用到所屬該模組或套用主體的 所有 控制器動作, 除非像上述一樣配置過濾器的 only 和 except 屬性。
注意: 在模組或應用主體中申明過濾器,在only 和 except 屬性中使用路由 代替動作 ID, 因為在模組或應用主體中只用動作ID並不能唯一指定到具體動作。
當一個動作有多個篩選器時,依照下列規則先後執行:
預先過濾
##依序執行應用主體中behaviors() 所列的篩選器。 依序執行模組中 behaviors() 列出的篩選器。 依序執行控制器中 behaviors() 所列出的篩選器。 如果任意過濾器終止動作執行, 後面的過濾器(包括預過濾和後過濾)不再執行。 成功透過預過濾後執行動作。後過濾
倒序執行控制器中 behaviors() 列出的過濾器。 倒序執行模組中 behaviors() 列出的過濾器。 倒序執行應用主體中 behaviors() 列出的篩選器。以上是yii濾鏡是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!