From fc9240499933347560e3711606a9bae3886c9af6 Mon Sep 17 00:00:00 2001 From: Nobuo Kihara Date: Fri, 7 Nov 2014 21:44:05 +0900 Subject: [PATCH 1/6] docs/guide-ja/images/request-lifecycle.png - replaced with the new one [ci skip] --- docs/guide-ja/images/request-lifecycle.png | Bin 40306 -> 38617 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/guide-ja/images/request-lifecycle.png b/docs/guide-ja/images/request-lifecycle.png index 1a47ee99dd5df6b3f8d9a59ad21e003f265940bd..f9ed032cec2432925eea80ece48ad35194c3074e 100644 GIT binary patch literal 38617 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�?E9#H1_bo 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 X?E)*)L#|uB2U+3i>gTe~DWM4fWOCxu literal 40306 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 Z3XP=4&l+RdW9~@TZq8qSb<-*E+~4F#ey0Ec From 1d50532cf2cb154f2b1356a79bed1184437b756b Mon Sep 17 00:00:00 2001 From: Nobuo Kihara Date: Fri, 7 Nov 2014 14:10:04 +0900 Subject: [PATCH 2/6] docs/guide-ja/structure-models.md - typo fixed [ci skip] --- docs/guide-ja/structure-models.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guide-ja/structure-models.md b/docs/guide-ja/structure-models.md index f87767ea67..0f8cbeb268 100644 --- a/docs/guide-ja/structure-models.md +++ b/docs/guide-ja/structure-models.md @@ -402,7 +402,7 @@ $array = $post->attributes; しかしながら、このメソッドを使うと、どのデータ項目 (*フィールド* と呼ばれます) を結果の配列に入れるか、 そして、その項目にどのような書式を適用するかを選ぶことが出来ます。 実際、[レスポンスの書式設定](rest-response-formatting.md) で説明されているように、 -RESTFul ウェブサービスの開発においては、これがモデルをエクスポートする既定の方法となっています。 +RESTful ウェブサービスの開発においては、これがモデルをエクスポートする既定の方法となっています。 ### フィールド From 0a54def2709e9b729733dc1736803be5c0031972 Mon Sep 17 00:00:00 2001 From: Nobuo Kihara Date: Fri, 7 Nov 2014 20:47:21 +0900 Subject: [PATCH 3/6] docs/guide-ja/* - fix regarding the word "rate" [ci skip] --- docs/guide-ja/README.md | 2 +- docs/guide-ja/start-installation.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/guide-ja/README.md b/docs/guide-ja/README.md index 97442b438d..4a1e9d79c1 100644 --- a/docs/guide-ja/README.md +++ b/docs/guide-ja/README.md @@ -136,7 +136,7 @@ RESTful ウェブサービス * [ルーティング](rest-routing.md) * [レスポンスの書式設定](rest-response-formatting.md) * [認証](rest-authentication.md) -* [速度制限](rest-rate-limiting.md) +* [転送レート制限](rest-rate-limiting.md) * [バージョン管理](rest-versioning.md) * [エラー処理](rest-error-handling.md) diff --git a/docs/guide-ja/start-installation.md b/docs/guide-ja/start-installation.md index 8cc7142efe..244b8a293c 100644 --- a/docs/guide-ja/start-installation.md +++ b/docs/guide-ja/start-installation.md @@ -35,9 +35,9 @@ Composer がインストールされたら、ウェブからアクセスでき 必要なら別のディレクトリ名を選ぶことも出来ます。 > Note|注意: インストール実行中に Composer が あなたの Github アカウントの認証情報を尋ねてくることがあるかも知れません。 -> これは、Comoser が Github API の帯域制限にひっかかったためです。 +> これは、Comoser が Github API の転送レート制限にひっかかったためです。 > Composer は全てのパッケージのための大量の情報を Github から読み出さなければならないので、こうなるのは普通のことです。 -> Github にログインすると API の帯域制限が緩和され、Composer が仕事を続けることが出来るようになります。 +> Github にログインすると API の転送レート制限が緩和され、Composer が仕事を続けることが出来るようになります。 > 更なる詳細については、[Composer documentation](https://getcomposer.org/doc/articles/troubleshooting.md#api-rate-limit-and-oauth-tokens) を参照してください。 > Tip|ヒント: Yii の最新の開発バージョンをインストールしたい場合は、[stability option](https://getcomposer.org/doc/04-schema.md#minimum-stability) を追加した次のコマンドを代りに使うことが出来ます: From 20563b2b7a40e90ee6be4cc9138dd04a4297d235 Mon Sep 17 00:00:00 2001 From: Nobuo Kihara Date: Thu, 6 Nov 2014 23:53:45 +0900 Subject: [PATCH 4/6] docs/guide-ja/structure-filters.md - prepared for translation [ci skip] --- docs/guide-ja/structure-filters.md | 400 +++++++++++++++++++++++++++++ 1 file changed, 400 insertions(+) create mode 100644 docs/guide-ja/structure-filters.md diff --git a/docs/guide-ja/structure-filters.md b/docs/guide-ja/structure-filters.md new file mode 100644 index 0000000000..4268348464 --- /dev/null +++ b/docs/guide-ja/structure-filters.md @@ -0,0 +1,400 @@ +Filters +======= + +Filters are objects that run before and/or after [controller actions](structure-controllers.md#actions). For example, +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 + +Filters are essentially a special kind of [behaviors](concept-behaviors.md). Therefore, using filters is the same +as [using behaviors](concept-behaviors.md#attaching-behaviors). You can declare filters in a controller class +by overriding its [[yii\base\Controller::behaviors()|behaviors()]] method like the following: + +```php +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'); + }, + ], + ]; +} +``` + +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]] property. In the above example, the `HttpCache` filter only applies to the +`index` and `view` actions. You can also configure the [[yii\base\ActionFilter::except|except]] property to blacklist +some actions from being filtered. + +Besides controllers, you can also declare filters in a [module](structure-modules.md) or [application](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]] +properties like described above. + +> Note: When declaring filters in modules or applications, you should use [routes](structure-controllers.md#routes) + instead of action IDs in the [[yii\base\ActionFilter::only|only]] and [[yii\base\ActionFilter::except|except]] properties. + This is because action IDs alone cannot fully specify actions within the scope of a module or application. + +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()`. + - Apply filters declared in the module in the order they are listed in `behaviors()`. + - Apply filters declared in the controller in the order they are listed in `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 + - Apply filters declared in the controller in the reverse order they are listed in `behaviors()`. + - Apply filters declared in the module in the reverse order they are listed in `behaviors()`. + - Apply filters declared in the application in the reverse order they are listed in `behaviors()`. + + +## Creating Filters + +To create a new action filter, extend from [[yii\base\ActionFilter]] and override the +[[yii\base\ActionFilter::beforeAction()|beforeAction()]] and/or [[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 +be executed or not. If it is false, the filters after this one will be skipped and the action will not be executed. + +The following example shows a filter that logs the action execution time: + +```php +namespace app\components; + +use Yii; +use yii\base\ActionFilter; + +class ActionTimeFilter extends ActionFilter +{ + private $_startTime; + + public function beforeAction($action) + { + $this->_startTime = microtime(true); + return parent::beforeAction($action); + } + + public function afterAction($action, $result) + { + $time = microtime(true) - $this->_startTime; + Yii::trace("Action '{$action->uniqueId}' spent $time second."); + return parent::afterAction($action, $result); + } +} +``` + + +## Core Filters + +Yii provides a set of commonly used filters, found primarily under the `yii\filters` namespace. In the following, +we will briefly introduce these filters. + + +### [[yii\filters\AccessControl|AccessControl]] + +AccessControl provides simple access control based on a set of [[yii\filters\AccessControl::rules|rules]]. +In particular, before an action is executed, AccessControl will examine the listed rules and find the first one +that matches the current context variables (such as user IP address, user login status, etc.) The matching +rule will dictate whether to allow or deny the execution of the requested action. If no rule matches, the access +will be denied. + +The following example shows how to allow authenticated users to access the `create` and `update` actions +while denying all other users from accessing these two actions. + +```php +use yii\filters\AccessControl; + +public function behaviors() +{ + return [ + 'access' => [ + 'class' => AccessControl::className(), + 'only' => ['create', 'update'], + 'rules' => [ + // allow authenticated users + [ + 'allow' => true, + 'roles' => ['@'], + ], + // everything else is denied by default + ], + ], + ]; +} +``` + +For more details about access control in general, please refer to the [Authorization](security-authorization.md) section. + + +### Authentication Method Filters + +Authentication method filters are used to authenticate a user based using various methods, such as +[HTTP Basic Auth](http://en.wikipedia.org/wiki/Basic_access_authentication), [OAuth 2](http://oauth.net/2/). +These filter classes are all under the `yii\filters\auth` namespace. + +The following example shows how you can use [[yii\filters\auth\HttpBasicAuth]] to authenticate a user using +an access token based on HTTP Basic Auth method. Note that in order for this to work, your +[[yii\web\User::identityClass|user identity class]] must implement the [[yii\web\IdentityInterface::findIdentityByAccessToken()|findIdentityByAccessToken()]] +method. + +```php +use yii\filters\auth\HttpBasicAuth; + +public function behaviors() +{ + return [ + 'basicAuth' => [ + 'class' => HttpBasicAuth::className(), + ], + ]; +} +``` + +Authentication method filters are commonly used in implementing RESTful APIs. For more details, please refer to the +RESTful [Authentication](rest-authentication.md) section. + + +### [[yii\filters\ContentNegotiator|ContentNegotiator]] + +ContentNegotiator supports response format negotiation and application language negotiation. It will try to +determine the response format and/or language by examining `GET` parameters and `Accept` HTTP header. + +In the following example, ContentNegotiator is configured to support JSON and XML response formats, and +English (United States) and German languages. + +```php +use yii\filters\ContentNegotiator; +use yii\web\Response; + +public function behaviors() +{ + return [ + [ + 'class' => ContentNegotiator::className(), + 'formats' => [ + 'application/json' => Response::FORMAT_JSON, + 'application/xml' => Response::FORMAT_XML, + ], + 'languages' => [ + 'en-US', + 'de', + ], + ], + ]; +} +``` + +Response formats and languages often need to be determined much earlier during +the [application lifecycle](structure-applications.md#application-lifecycle). For this reason, ContentNegotiator +is designed in a way such that it can also be used as a [bootstrapping component](structure-applications.md#bootstrap) +besides filter. For example, you may configure it in the [application configuration](structure-applications.md#application-configurations) +like the following: + +```php +use yii\filters\ContentNegotiator; +use yii\web\Response; + +[ + 'bootstrap' => [ + [ + 'class' => ContentNegotiator::className(), + 'formats' => [ + 'application/json' => Response::FORMAT_JSON, + 'application/xml' => Response::FORMAT_XML, + ], + 'languages' => [ + 'en-US', + 'de', + ], + ], + ], +]; +``` + +> Info: In case the preferred content type and language cannot be determined from a request, the first format and + language listed in [[formats]] and [[languages]] will be used. + + + +### [[yii\filters\HttpCache|HttpCache]] + +HttpCache implements client-side caching by utilizing the `Last-Modified` and `Etag` HTTP headers. +For example, + +```php +use yii\filters\HttpCache; + +public function behaviors() +{ + return [ + [ + 'class' => HttpCache::className(), + 'only' => ['index'], + 'lastModified' => function ($action, $params) { + $q = new \yii\db\Query(); + return $q->from('user')->max('updated_at'); + }, + ], + ]; +} +``` + +Please refer to the [HTTP Caching](caching-http.md) section for more details about using HttpCache. + + +### [[yii\filters\PageCache|PageCache]] + +PageCache implements server-side caching of whole pages. In the following example, PageCache is applied +to the `index` action to cache the whole page for maximum 60 seconds or until the count of entries in the `post` +table changes. It also stores different versions of the page depending on the chosen application language. + +```php +use yii\filters\PageCache; +use yii\caching\DbDependency; + +public function behaviors() +{ + return [ + 'pageCache' => [ + 'class' => PageCache::className(), + 'only' => ['index'], + 'duration' => 60, + 'dependency' => [ + 'class' => DbDependency::className(), + 'sql' => 'SELECT COUNT(*) FROM post', + ], + 'variations' => [ + \Yii::$app->language, + ] + ], + ]; +} +``` + +Please refer to the [Page Caching](caching-page.md) section for more details about using PageCache. + + +### [[yii\filters\RateLimiter|RateLimiter]] + +RateLimiter implements a rate limiting algorithm based on the [leaky bucket algorithm](http://en.wikipedia.org/wiki/Leaky_bucket). +It is primarily used in implementing RESTful APIs. Please refer to the [Rate Limiting](rest-rate-limiting.md) section +for details about using this filter. + + +### [[yii\filters\VerbFilter|VerbFilter]] + +VerbFilter checks if the HTTP request methods are allowed by the requested actions. If not allowed, it will +throw an HTTP 405 exception. In the following example, VerbFilter is declared to specify a typical set of allowed +request methods for CRUD actions. + +```php +use yii\filters\VerbFilter; + +public function behaviors() +{ + return [ + 'verbs' => [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'index' => ['get'], + 'view' => ['get'], + 'create' => ['get', 'post'], + 'update' => ['get', 'put', 'post'], + 'delete' => ['post', 'delete'], + ], + ], + ]; +} +``` + +### [[yii\filters\Cors|Cors]] + +Cross-origin resource sharing [CORS](https://developer.mozilla.org/fr/docs/HTTP/Access_control_CORS) is a mechanism that allows many resources (e.g. fonts, JavaScript, etc.) +on a Web page to be requested from another domain outside the domain the resource originated from. +In particular, JavaScript's AJAX calls can use the XMLHttpRequest mechanism. Such "cross-domain" requests would +otherwise be forbidden by Web browsers, per the same origin security policy. +CORS defines a way in which the browser and the server can interact to determine whether or not to allow the cross-origin request. + +The [[yii\filters\Cors|Cors filter]] should be defined before Authentication / Authorization filters to make sure the CORS headers +will always be sent. + +```php +use yii\filters\Cors; +use yii\helpers\ArrayHelper; + +public function behaviors() +{ + return ArrayHelper::merge([ + [ + 'class' => Cors::className(), + ], + ], parent::behaviors()); +} +``` + +The Cors filtering could be tuned using the `cors` property. + +* `cors['Origin']`: array used to define allowed origins. Can be `['*']` (everyone) or `['http://www.myserver.net', 'http://www.myotherserver.com']`. Default to `['*']`. +* `cors['Access-Control-Request-Method']`: array of allowed verbs like `['GET', 'OPTIONS', 'HEAD']`. Default to `['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS']`. +* `cors['Access-Control-Request-Headers']`: array of allowed headers. Can be `['*']` all headers or specific ones `['X-Request-With']`. Default to `['*']`. +* `cors['Access-Control-Allow-Credentials']`: define if current request can be made using credentials. Can be `true`, `false` or `null` (not set). Default to `null`. +* `cors['Access-Control-Max-Age']`: define lifetime of pre-flight request. Default to `86400`. + +For example, allowing CORS for origin : `http://www.myserver.net` with method `GET`, `HEAD` and `OPTIONS` : + +```php +use yii\filters\Cors; +use yii\helpers\ArrayHelper; + +public function behaviors() +{ + return ArrayHelper::merge([ + [ + 'class' => Cors::className(), + 'cors' => [ + 'Origin' => ['http://www.myserver.net'], + 'Access-Control-Request-Method' => ['GET', 'HEAD', 'OPTIONS'], + ], + ], + ], parent::behaviors()); +} +``` + +You may tune the CORS headers by overriding default parameters on a per action basis. +For example adding the `Access-Control-Allow-Credentials` for the `login` action could be done like this : + +```php +use yii\filters\Cors; +use yii\helpers\ArrayHelper; + +public function behaviors() +{ + return ArrayHelper::merge([ + [ + 'class' => Cors::className(), + 'cors' => [ + 'Origin' => ['http://www.myserver.net'], + 'Access-Control-Request-Method' => ['GET', 'HEAD', 'OPTIONS'], + ], + 'actions' => [ + 'login' => [ + 'Access-Control-Allow-Credentials' => true, + ] + ] + ], + ], parent::behaviors()); +} +``` From 7dd5ac083127eef30ca73b85738ff597a55182b6 Mon Sep 17 00:00:00 2001 From: Nobuo Kihara Date: Fri, 7 Nov 2014 14:10:31 +0900 Subject: [PATCH 5/6] docs/guide-ja/structure-filters.md - WIP [ci skip] --- docs/guide-ja/structure-filters.md | 92 +++++++++++++++--------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/docs/guide-ja/structure-filters.md b/docs/guide-ja/structure-filters.md index 4268348464..26e06a51cf 100644 --- a/docs/guide-ja/structure-filters.md +++ b/docs/guide-ja/structure-filters.md @@ -1,19 +1,20 @@ -Filters -======= +フィルタ +======== -Filters are objects that run before and/or after [controller actions](structure-controllers.md#actions). For example, -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. +フィルタは、[コントローラアクション](structure-controllers.md#actions) の前 および/または 後に走るオブジェクトです。 +例えば、アクセスコントロールフィルタはアクションの前に走って、アクションが特定のエンドユーザだけにアクセスを許可するものであることを保証します。 +また、コンテンツ圧縮フィルタはアクションの後に走って、レスポンスのコンテンツをエンドユーザに送出する前に圧縮します。 -A filter may consist of a pre-filter (filtering logic applied *before* actions) and/or a post-filter (logic applied -*after* actions). +フィルタは、前フィルタ (アクションの *前* に適用されるフィルタのロジック) および/または 後フィルタ (アクションの *後* +に適用されるフィルタ) から構成されます。 -## Using Filters +## フィルタを使用する -Filters are essentially a special kind of [behaviors](concept-behaviors.md). Therefore, using filters is the same -as [using behaviors](concept-behaviors.md#attaching-behaviors). You can declare filters in a controller class -by overriding its [[yii\base\Controller::behaviors()|behaviors()]] method like the following: +フィルタは、本質的には特別な種類の [ビヘイビア](concept-behaviors.md) です。したがって、フィルタを使うことは +[ビヘイビアを使う](concept-behaviors.md#attaching-behaviors) ことと同じです。下記のように、 +[[yii\base\Controller::behaviors()|behaviors()]] メソッドをオーバーライドすることによって、コントローラの中で +フィルタを宣言することが出来ます: ```php 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]] property. In the above example, the `HttpCache` filter only applies to the -`index` and `view` actions. You can also configure the [[yii\base\ActionFilter::except|except]] property to blacklist -some actions from being filtered. +既定では、コントローラクラスの中で宣言されたフィルタは、そのコントローラの *全て* のアクションに適用されます。 +しかし、[[yii\base\ActionFilter::only|only]] プロパティを構成することによって、フィルタがどのアクションに適用されるべきかを +明示的に指定することも出来ます。上記の例では、 `HttpCache` フィルタは、`index` と `view` のアクションに対してのみ適用されています。 +また、[[yii\base\ActionFilter::except|except]] プロパティを構成して、いくつかのアクションをフィルタされないように除外することも可能です。 -Besides controllers, you can also declare filters in a [module](structure-modules.md) or [application](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]] -properties like described above. +コントローラのほかに、[モジュール](structure-modules.md) または [アプリケーション](structure-applications.md) +でもフィルタを宣言することが出来ます。 +そのようにした場合、[[yii\base\ActionFilter::only|only]] と [[yii\base\ActionFilter::except|except]] のプロパティを +上で説明したように構成しない限り、そのフィルタは、モジュールまたはアプリケーションに属する *全て* のコントローラアクションに適用されます。 -> Note: When declaring filters in modules or applications, you should use [routes](structure-controllers.md#routes) - instead of action IDs in the [[yii\base\ActionFilter::only|only]] and [[yii\base\ActionFilter::except|except]] properties. - This is because action IDs alone cannot fully specify actions within the scope of a module or application. +> Note|注意: モジュールやアプリケーションでフィルタを宣言する場合、[[yii\base\ActionFilter::only|only]] と + [[yii\base\ActionFilter::except|except]] のプロパティでは、アクション ID ではなく、[ルート](structure-controllers.md#routes) + を使うべきです。なぜなら、モジュールやアプリケーションのスコープでは、アクション 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()`. - - Apply filters declared in the module in the order they are listed in `behaviors()`. - - Apply filters declared in the controller in the order they are listed in `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 - - Apply filters declared in the controller in the reverse order they are listed in `behaviors()`. - - Apply filters declared in the module in the reverse order they are listed in `behaviors()`. - - Apply filters declared in the application in the reverse order they are listed in `behaviors()`. +* 前フィルタ + - アプリケーションで宣言されたフィルタを `behaviors()` にリストされた順に適用する。 + - モジュールで宣言されたフィルタを `behaviors()` にリストされた順に適用する。 + - コントローラで宣言されたフィルタを `behaviors()` にリストされた順に適用する。 + - フィルタのどれかがアクションをキャンセルすると、そのフィルタの後のフィルタ (前フィルタと後フィルタの両方) は適用されない。 +* 前フィルタを通過したら、アクションを走らせる。 +* 後フィルタ + - コントローラで宣言されたフィルタを `behaviors()` にリストされた逆順で適用する。 + - モジュールで宣言されたフィルタを `behaviors()` にリストされた逆順で適用する。 + - アプリケーションで宣言されたフィルタを `behaviors()` にリストされた逆順で適用する。 -## Creating Filters +## フィルタを作成する -To create a new action filter, extend from [[yii\base\ActionFilter]] and override the -[[yii\base\ActionFilter::beforeAction()|beforeAction()]] and/or [[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 -be executed or not. If it is false, the filters after this one will be skipped and the action will not be executed. +新しいアクションフィルタを作成するためには、[[yii\base\ActionFilter]] を拡張して、 +[[yii\base\ActionFilter::beforeAction()|beforeAction()]] および/または [[yii\base\ActionFilter::afterAction()|afterAction()]] +メソッドをオーバーライドします。前者はアクションが走る前に実行され、後者は走った後に実行されます。 +[[yii\base\ActionFilter::beforeAction()|beforeAction()]] の返り値が、アクションが実行されるべきか否かを決定します。 +返り値が false である場合、このフィルタの後に続くフィルタはスキップされ、アクションは実行を中止されます。 -The following example shows a filter that logs the action execution time: +次の例は、アクションの実行時間をログに記録するフィルタを示すものです: ```php namespace app\components; @@ -90,17 +90,17 @@ class ActionTimeFilter extends ActionFilter public function afterAction($action, $result) { $time = microtime(true) - $this->_startTime; - Yii::trace("Action '{$action->uniqueId}' spent $time second."); + Yii::trace("アクション '{$action->uniqueId}' は $time 秒を消費。"); return parent::afterAction($action, $result); } } ``` -## Core Filters +## コアのフィルタ -Yii provides a set of commonly used filters, found primarily under the `yii\filters` namespace. In the following, -we will briefly introduce these filters. +Yii はよく使われる一連のフィルタを提供しており、それらは、主として `yii\filters` 名前空間の下にあります。以下では、 +それらのフィルタを簡単に紹介します。 ### [[yii\filters\AccessControl|AccessControl]] From 01850733bb3e7e4664c5d081f535631a19d2ab44 Mon Sep 17 00:00:00 2001 From: Nobuo Kihara Date: Fri, 7 Nov 2014 20:47:42 +0900 Subject: [PATCH 6/6] docs/guide-ja/structure-filters.md - completed [ci skip] --- docs/guide-ja/structure-filters.md | 121 +++++++++++++++-------------- 1 file changed, 61 insertions(+), 60 deletions(-) diff --git a/docs/guide-ja/structure-filters.md b/docs/guide-ja/structure-filters.md index 26e06a51cf..aebb84ad68 100644 --- a/docs/guide-ja/structure-filters.md +++ b/docs/guide-ja/structure-filters.md @@ -105,14 +105,13 @@ Yii はよく使われる一連のフィルタを提供しており、それら ### [[yii\filters\AccessControl|AccessControl]] -AccessControl provides simple access control based on a set of [[yii\filters\AccessControl::rules|rules]]. -In particular, before an action is executed, AccessControl will examine the listed rules and find the first one -that matches the current context variables (such as user IP address, user login status, etc.) The matching -rule will dictate whether to allow or deny the execution of the requested action. If no rule matches, the access -will be denied. +AccessControl は、一組の [[yii\filters\AccessControl::rules|規則]] に基づいて、シンプルなアクセスコントロールを提供するものです。 +具体的に言うと、アクションが実行される前に、AccessControl はリストされた規則を調べて、現在のコンテキスト変数 (例えば、ユーザの IP アドレスや、ユーザのログイン状態など) に最初に合致するものを見つけます。 +そして、合致した規則によって、リクエストされたアクションの実行を許可するか拒否するかを決定します。 +合致する規則がなかった場合は、アクセスは拒否されます。 -The following example shows how to allow authenticated users to access the `create` and `update` actions -while denying all other users from accessing these two actions. +次の例は、認証されたユーザに対しては `create` と `update` のアクションへのアクセスを許可し、 +その他のすべてのユーザにはこれら二つのアクションに対するアクセスを拒否する仕方を示すものです。 ```php use yii\filters\AccessControl; @@ -124,31 +123,31 @@ public function behaviors() 'class' => AccessControl::className(), 'only' => ['create', 'update'], 'rules' => [ - // allow authenticated users + // 認証されたユーザに許可する [ 'allow' => true, 'roles' => ['@'], ], - // everything else is denied by default + // その他は、既定により拒否される ], ], ]; } ``` -For more details about access control in general, please refer to the [Authorization](security-authorization.md) section. +アクセスコントロール一般について、更なる詳細は [権限](security-authorization.md) の節を参照してください。 -### Authentication Method Filters +### 認証メソッドフィルタ -Authentication method filters are used to authenticate a user based using various methods, such as -[HTTP Basic Auth](http://en.wikipedia.org/wiki/Basic_access_authentication), [OAuth 2](http://oauth.net/2/). -These filter classes are all under the `yii\filters\auth` namespace. +認証メソッドフィルタは、[HTTP Basic 認証](http://ja.wikipedia.org/wiki/Basic%E8%AA%8D%E8%A8%BC)、 +[OAuth 2](http://oauth.net/2/) など、様々なメソッドを使ってユーザを認証するために使われるものです。 +これらのフィルタクラスはすべて `yii\filters\auth` 名前空間の下にあります。 -The following example shows how you can use [[yii\filters\auth\HttpBasicAuth]] to authenticate a user using -an access token based on HTTP Basic Auth method. Note that in order for this to work, your -[[yii\web\User::identityClass|user identity class]] must implement the [[yii\web\IdentityInterface::findIdentityByAccessToken()|findIdentityByAccessToken()]] -method. +次の例は、[[yii\filters\auth\HttpBasicAuth]] の使い方を示すもので、HTTP Basic 認証に基づくアクセストークンを使ってユーザを認証しています。 +これを動作させるためには、あなたの [[yii\web\User::identityClass|ユーザアイデンティティクラス]] が +[[yii\web\IdentityInterface::findIdentityByAccessToken()|findIdentityByAccessToken()]] +メソッドを実装していなければならないことに注意してください。 ```php use yii\filters\auth\HttpBasicAuth; @@ -163,17 +162,18 @@ public function behaviors() } ``` -Authentication method filters are commonly used in implementing RESTful APIs. For more details, please refer to the -RESTful [Authentication](rest-authentication.md) section. +認証メソッドフィルタは RESTful API を実装するときに使われるのが通例です。詳細については、 +RESTful の [認証](rest-authentication.md) の節を参照してください。 ### [[yii\filters\ContentNegotiator|ContentNegotiator]] -ContentNegotiator supports response format negotiation and application language negotiation. It will try to -determine the response format and/or language by examining `GET` parameters and `Accept` HTTP header. +ContentNegotiator は、レスポンス形式のネゴシエーションとアプリケーション言語のネゴシエーションをサポートします。 +このフィルタは `GET` パラメータと `Accept` HTTP ヘッダを調べることによって、レスポンス形式 および/または +言語を決定しようとします。 -In the following example, ContentNegotiator is configured to support JSON and XML response formats, and -English (United States) and German languages. +次の例では、ContentNegotiator はレスポンス形式として JSON と XML をサポートし、(合衆国の)英語とドイツ語を +言語としてサポートするように構成されています。 ```php use yii\filters\ContentNegotiator; @@ -197,11 +197,10 @@ public function behaviors() } ``` -Response formats and languages often need to be determined much earlier during -the [application lifecycle](structure-applications.md#application-lifecycle). For this reason, ContentNegotiator -is designed in a way such that it can also be used as a [bootstrapping component](structure-applications.md#bootstrap) -besides filter. For example, you may configure it in the [application configuration](structure-applications.md#application-configurations) -like the following: +レスポンス形式と言語は [アプリケーションのライフサイクル](structure-applications.md#application-lifecycle) +のもっと早い段階で決定される必要があることがよくあります。このため、ContentNegotiator はフィルタの他に、 +[ブートストラップコンポーネント](structure-applications.md#bootstrap) としても使うことができるように設計されています。 +例えば、次のように、ContentNegotiator を [アプリケーションのコンフィギュレーション](structure-applications.md#application-configurations) の中で構成することが出来ます。 ```php use yii\filters\ContentNegotiator; @@ -224,15 +223,14 @@ use yii\web\Response; ]; ``` -> Info: In case the preferred content type and language cannot be determined from a request, the first format and - language listed in [[formats]] and [[languages]] will be used. +> Info|情報: 望ましいコンテントタイプと言語がリクエストからは決定できない場合は、[[formats]] および [[languages]] +に挙げられている最初の形式と言語が使用されます。 ### [[yii\filters\HttpCache|HttpCache]] -HttpCache implements client-side caching by utilizing the `Last-Modified` and `Etag` HTTP headers. -For example, +HttpCache は `Last-Modified` および `Etag` の HTTP ヘッダを利用して、クライアントサイドのキャッシュを実装するものです。 ```php use yii\filters\HttpCache; @@ -252,14 +250,15 @@ public function behaviors() } ``` -Please refer to the [HTTP Caching](caching-http.md) section for more details about using HttpCache. +HttpCache に関する更なる詳細は [HTTP キャッシュ](caching-http.md) の節を参照してください。 ### [[yii\filters\PageCache|PageCache]] -PageCache implements server-side caching of whole pages. In the following example, PageCache is applied -to the `index` action to cache the whole page for maximum 60 seconds or until the count of entries in the `post` -table changes. It also stores different versions of the page depending on the chosen application language. +PageCache はサーバサイドにおけるページ全体のキャッシュを実装するものです。次の例では、PageCache が +`index` アクションに適用されて、最大 60 秒間、または、`post` テーブルのエントリ数が変化するまでの間、 +ページ全体をキャッシュしています。さらに、このページキャッシュは、選択されたアプリケーションの言語に従って、 +違うバージョンのページを保存するようにしています。 ```php use yii\filters\PageCache; @@ -284,21 +283,21 @@ public function behaviors() } ``` -Please refer to the [Page Caching](caching-page.md) section for more details about using PageCache. +PageCache の使用に関する更なる詳細は [ページキャッシュ](caching-page.md) の節を参照してください。 ### [[yii\filters\RateLimiter|RateLimiter]] -RateLimiter implements a rate limiting algorithm based on the [leaky bucket algorithm](http://en.wikipedia.org/wiki/Leaky_bucket). -It is primarily used in implementing RESTful APIs. Please refer to the [Rate Limiting](rest-rate-limiting.md) section -for details about using this filter. +RateLimiter は [リーキーバケットアルゴリズム](http://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%BC%E3%82%AD%E3%83%BC%E3%83%90%E3%82%B1%E3%83%83%E3%83%88) +に基づいて転送レート制限のアルゴリズムを実装するものです。主として RESTful API を実装するときに使用されます。 +このフィルタの使用に関する詳細は [転送レート制限](rest-rate-limiting.md) の節を参照してください。 ### [[yii\filters\VerbFilter|VerbFilter]] -VerbFilter checks if the HTTP request methods are allowed by the requested actions. If not allowed, it will -throw an HTTP 405 exception. In the following example, VerbFilter is declared to specify a typical set of allowed -request methods for CRUD actions. +VerbFilter は、HTTP リクエストメソッドがリクエストされたアクションによって許可されているかどうかをチェックするものです。 +許可されていない場合は、HTTP 405 例外を投げます。次の例では、VerbFilter が宣言されて、 +CRUD アクションに対して許可されるメソッドの典型的なセットを規定しています。 ```php use yii\filters\VerbFilter; @@ -322,14 +321,15 @@ public function behaviors() ### [[yii\filters\Cors|Cors]] -Cross-origin resource sharing [CORS](https://developer.mozilla.org/fr/docs/HTTP/Access_control_CORS) is a mechanism that allows many resources (e.g. fonts, JavaScript, etc.) -on a Web page to be requested from another domain outside the domain the resource originated from. -In particular, JavaScript's AJAX calls can use the XMLHttpRequest mechanism. Such "cross-domain" requests would -otherwise be forbidden by Web browsers, per the same origin security policy. -CORS defines a way in which the browser and the server can interact to determine whether or not to allow the cross-origin request. +クロスオリジンリソース共有 [CORS](https://developer.mozilla.org/ja/docs/HTTP_access_control) とは、 +ウェブページにおいて、さまざまなリソース (例えば、フォントや JavaScript など) を、 +それを生成するドメイン以外のドメインからリクエストすることを可能にするメカニズムです。 +特に言えば、JavaScript の AJAX 呼出しが使用することが出来る XMLHttpRequest メカニズムです。 +このような「クロスドメイン」のリクエストは、このメカニズムに拠らなければ、 +同一生成元のセキュリティポリシーによって、ウェブブラウザから禁止されるはずのものです。 +CORS は、ブラウザとサーバが交信して、クロスドメインのリクエストを許可するか否かを決定する方法を定義するものです。 -The [[yii\filters\Cors|Cors filter]] should be defined before Authentication / Authorization filters to make sure the CORS headers -will always be sent. +[[yii\filters\Cors|Cors フィルタ]] は、CORS ヘッダが常に送信されることを保証するために、Authentication / Authorization のフィルタよりも前に定義されなければなりません。 ```php use yii\filters\Cors; @@ -345,15 +345,16 @@ public function behaviors() } ``` -The Cors filtering could be tuned using the `cors` property. +Cors のフィルタリングは `cors` プロパティを使ってチューニングすることが出来ます。 -* `cors['Origin']`: array used to define allowed origins. Can be `['*']` (everyone) or `['http://www.myserver.net', 'http://www.myotherserver.com']`. Default to `['*']`. -* `cors['Access-Control-Request-Method']`: array of allowed verbs like `['GET', 'OPTIONS', 'HEAD']`. Default to `['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS']`. -* `cors['Access-Control-Request-Headers']`: array of allowed headers. Can be `['*']` all headers or specific ones `['X-Request-With']`. Default to `['*']`. -* `cors['Access-Control-Allow-Credentials']`: define if current request can be made using credentials. Can be `true`, `false` or `null` (not set). Default to `null`. -* `cors['Access-Control-Max-Age']`: define lifetime of pre-flight request. Default to `86400`. +* `cors['Origin']`: 許可される生成元を定義するのに使われる配列。`['*']` (すべて) または `['http://www.myserver.net'、'http://www.myotherserver.com']` などが設定可能。デフォルトは `['*']`。 +* `cors['Access-Control-Request-Method']`: 許可されるメソッドの配列。たとえば、`['GET', 'OPTIONS', 'HEAD']`。デフォルトは `['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS']`。 +* `cors['Access-Control-Request-Headers']`: 許可されるヘッダの配列。全てのヘッダを意味する `['*']` または特定のヘッダを示す `['X-Request-With']` が設定可能。デフォルトは `['*']`。 +* `cors['Access-Control-Allow-Credentials']`: 現在のリクエストをクレデンシャルを使ってすることが出来るかどうかを定義。 +`true`、`false` または `null` (設定なし) が設定可能。デフォルトは `null`。 +* `cors['Access-Control-Max-Age']`: プリフライトリクエストの寿命を定義。デフォルトは `86400`。 -For example, allowing CORS for origin : `http://www.myserver.net` with method `GET`, `HEAD` and `OPTIONS` : +次の例は、生成元 `http://www.myserver.net` に対する `GET`、`HEAD` および `OPTIONS` のメソッドによる CORS を許可するものです: ```php use yii\filters\Cors; @@ -373,8 +374,8 @@ public function behaviors() } ``` -You may tune the CORS headers by overriding default parameters on a per action basis. -For example adding the `Access-Control-Allow-Credentials` for the `login` action could be done like this : +デフォルトのパラメータをアクション単位でオーバーライドして CORS ヘッダをチューニングすることも可能です。 +例えば、`login` アクションに `Access-Control-Allow-Credentials` を追加することは、次のようにすれば出来ます: ```php use yii\filters\Cors;