Commit 7dd5ac08 by Nobuo Kihara

docs/guide-ja/structure-filters.md - WIP [ci skip]

parent 20563b2b
Filters フィルタ
======= ========
Filters are objects that run before and/or after [controller actions](structure-controllers.md#actions). For example, フィルタは、[コントローラアクション](structure-controllers.md#actions) の前 および/または 後に走るオブジェクトです。
an access control filter may run before actions to ensure that they are allowed to be accessed by particular end users; 例えば、アクセスコントロールフィルタはアクションの前に走って、アクションが特定のエンドユーザだけにアクセスを許可するものであることを保証します。
a content compression filter may run after actions to compress the response content before sending them out to end users. また、コンテンツ圧縮フィルタはアクションの後に走って、レスポンスのコンテンツをエンドユーザに送出する前に圧縮します。
A filter may consist of a pre-filter (filtering logic applied *before* actions) and/or a post-filter (logic applied フィルタは、前フィルタ (アクションの *前* に適用されるフィルタのロジック) および/または 後フィルタ (アクションの *後*
*after* actions). に適用されるフィルタ) から構成されます。
## Using Filters <a name="using-filters"></a> ## フィルタを使用する <a name="using-filters"></a>
Filters are essentially a special kind of [behaviors](concept-behaviors.md). Therefore, using filters is the same フィルタは、本質的には特別な種類の [ビヘイビア](concept-behaviors.md) です。したがって、フィルタを使うことは
as [using behaviors](concept-behaviors.md#attaching-behaviors). You can declare filters in a controller class [ビヘイビアを使う](concept-behaviors.md#attaching-behaviors) ことと同じです。下記のように、
by overriding its [[yii\base\Controller::behaviors()|behaviors()]] method like the following: [[yii\base\Controller::behaviors()|behaviors()]] メソッドをオーバーライドすることによって、コントローラの中で
フィルタを宣言することが出来ます:
```php ```php
public function behaviors() public function behaviors()
...@@ -31,45 +32,44 @@ public function behaviors() ...@@ -31,45 +32,44 @@ public function behaviors()
} }
``` ```
By default, filters declared in a controller class will be applied to *all* actions in that controller. You can, 既定では、コントローラクラスの中で宣言されたフィルタは、そのコントローラの *全て* のアクションに適用されます。
however, explicitly specify which actions the filter should be applied to by configuring the しかし、[[yii\base\ActionFilter::only|only]] プロパティを構成することによって、フィルタがどのアクションに適用されるべきかを
[[yii\base\ActionFilter::only|only]] property. In the above example, the `HttpCache` filter only applies to the 明示的に指定することも出来ます。上記の例では、 `HttpCache` フィルタは、`index``view` のアクションに対してのみ適用されています。
`index` and `view` actions. You can also configure the [[yii\base\ActionFilter::except|except]] property to blacklist また、[[yii\base\ActionFilter::except|except]] プロパティを構成して、いくつかのアクションをフィルタされないように除外することも可能です。
some actions from being filtered.
Besides controllers, you can also declare filters in a [module](structure-modules.md) or [application](structure-applications.md). コントローラのほかに、[モジュール](structure-modules.md) または [アプリケーション](structure-applications.md)
When you do so, the filters will be applied to *all* controller actions belonging to that module or application, でもフィルタを宣言することが出来ます。
unless you configure the filters' [[yii\base\ActionFilter::only|only]] and [[yii\base\ActionFilter::except|except]] そのようにした場合、[[yii\base\ActionFilter::only|only]] と [[yii\base\ActionFilter::except|except]] のプロパティを
properties like described above. 上で説明したように構成しない限り、そのフィルタは、モジュールまたはアプリケーションに属する *全て* のコントローラアクションに適用されます。
> Note: When declaring filters in modules or applications, you should use [routes](structure-controllers.md#routes) > Note|注意: モジュールやアプリケーションでフィルタを宣言する場合、[[yii\base\ActionFilter::only|only]] と
instead of action IDs in the [[yii\base\ActionFilter::only|only]] and [[yii\base\ActionFilter::except|except]] properties. [[yii\base\ActionFilter::except|except]] のプロパティでは、アクション ID ではなく、[ルート](structure-controllers.md#routes)
This is because action IDs alone cannot fully specify actions within the scope of a module or application. を使うべきです。なぜなら、モジュールやアプリケーションのスコープでは、アクション ID だけでは完全にアクションを指定することが
出来ないからです。
When multiple filters are configured for a single action, they are applied according to the rules described below, 一つのアクションに複数のフィルタが構成されている場合、フィルタは下記で説明されている規則に従って適用されます。
* Pre-filtering * 前フィルタ
- Apply filters declared in the application in the order they are listed in `behaviors()`. - アプリケーションで宣言されたフィルタを `behaviors()` にリストされた順に適用する。
- Apply filters declared in the module in the order they are listed in `behaviors()`. - モジュールで宣言されたフィルタを `behaviors()` にリストされた順に適用する。
- Apply filters declared in the controller in the order they are listed in `behaviors()`. - コントローラで宣言されたフィルタを `behaviors()` にリストされた順に適用する。
- If any of the filters cancel the action execution, the filters (both pre-filters and post-filters) after it will - フィルタのどれかがアクションをキャンセルすると、そのフィルタの後のフィルタ (前フィルタと後フィルタの両方) は適用されない。
not be applied. * 前フィルタを通過したら、アクションを走らせる。
* Running the action if it passes the pre-filtering. * 後フィルタ
* Post-filtering - コントローラで宣言されたフィルタを `behaviors()` にリストされた逆順で適用する。
- Apply filters declared in the controller in the reverse order they are listed in `behaviors()`. - モジュールで宣言されたフィルタを `behaviors()` にリストされた逆順で適用する。
- Apply filters declared in the module in the reverse order they are listed in `behaviors()`. - アプリケーションで宣言されたフィルタを `behaviors()` にリストされた逆順で適用する。
- Apply filters declared in the application in the reverse order they are listed in `behaviors()`.
## Creating Filters <a name="creating-filters"></a> ## フィルタを作成する <a name="creating-filters"></a>
To create a new action filter, extend from [[yii\base\ActionFilter]] and override the 新しいアクションフィルタを作成するためには、[[yii\base\ActionFilter]] を拡張して、
[[yii\base\ActionFilter::beforeAction()|beforeAction()]] and/or [[yii\base\ActionFilter::afterAction()|afterAction()]] [[yii\base\ActionFilter::beforeAction()|beforeAction()]] および/または [[yii\base\ActionFilter::afterAction()|afterAction()]]
methods. The former will be executed before an action runs while the latter after an action runs. メソッドをオーバーライドします。前者はアクションが走る前に実行され、後者は走った後に実行されます。
The return value of [[yii\base\ActionFilter::beforeAction()|beforeAction()]] determines whether an action should [[yii\base\ActionFilter::beforeAction()|beforeAction()]] の返り値が、アクションが実行されるべきか否かを決定します。
be executed or not. If it is false, the filters after this one will be skipped and the action will not be executed. 返り値が false である場合、このフィルタの後に続くフィルタはスキップされ、アクションは実行を中止されます。
The following example shows a filter that logs the action execution time: 次の例は、アクションの実行時間をログに記録するフィルタを示すものです:
```php ```php
namespace app\components; namespace app\components;
...@@ -90,17 +90,17 @@ class ActionTimeFilter extends ActionFilter ...@@ -90,17 +90,17 @@ class ActionTimeFilter extends ActionFilter
public function afterAction($action, $result) public function afterAction($action, $result)
{ {
$time = microtime(true) - $this->_startTime; $time = microtime(true) - $this->_startTime;
Yii::trace("Action '{$action->uniqueId}' spent $time second."); Yii::trace("アクション '{$action->uniqueId}' は $time 秒を消費。");
return parent::afterAction($action, $result); return parent::afterAction($action, $result);
} }
} }
``` ```
## Core Filters <a name="core-filters"></a> ## コアのフィルタ <a name="core-filters"></a>
Yii provides a set of commonly used filters, found primarily under the `yii\filters` namespace. In the following, Yii はよく使われる一連のフィルタを提供しており、それらは、主として `yii\filters` 名前空間の下にあります。以下では、
we will briefly introduce these filters. それらのフィルタを簡単に紹介します。
### [[yii\filters\AccessControl|AccessControl]] <a name="access-control"></a> ### [[yii\filters\AccessControl|AccessControl]] <a name="access-control"></a>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment