mirror of
https://github.com/yiisoft/yii2.git
synced 2025-08-14 22:30:27 +08:00
docs/guide-ja minor updates
This commit is contained in:
@ -1,13 +1,14 @@
|
|||||||
キャッシュ
|
キャッシュ
|
||||||
=======
|
==========
|
||||||
|
|
||||||
ウェブアプリケーションのパフォーマンスを向上させるための簡単で効果的な方法としてキャッシュというものがあります。
|
キャッシュはウェブアプリケーションのパフォーマンスを向上させるための安価で効果的な方法です。
|
||||||
比較的静的なデータをキャッシュに格納し、要求に応じてキャッシュからそれらを取得することによって、アプリケーションは毎回一からデータを生成するのに必要な時間を節約することができます。
|
比較的静的なデータをキャッシュに格納し、要求に応じてキャッシュからそれを取得します。
|
||||||
|
これによって、アプリケーションは、毎回一からデータを生成した場合に必要になるであろう時間を節約することができます。
|
||||||
|
|
||||||
キャッシュはアプリケーション内のさまざまなレベルと場所で使用することができます。
|
キャッシュはアプリケーション内のさまざまなレベルと場所で使用することができます。
|
||||||
例えばサーバサイドでの低いレベルでは、データベースから取得した最新の記事情報リストのような基本的なデータを格納するために使用することが出来ます。
|
例えばサーバサイドでの低いレベルでは、データベースから取得した最新の記事情報リストのような基本的なデータを格納するためにキャッシュを使用することが出来ます。
|
||||||
高いレベルでは、ウェブページの断片または全体、例えば、最新の記事のレンダリング結果を格納するために使用することが出来ます。
|
より高いレベルでは、ウェブページの断片または全体、例えば、最新の記事のレンダリング結果を格納するためにキャッシュを使用することが出来ます。
|
||||||
クライアントサイドでは、ブラウザのキャッシュに最近訪れたことのあるページの内容を格納するために HTTP キャッシュを使用することもできます。
|
クライアントサイドでは、最近訪れたページの内容をブラウザのキャッシュに格納するために、HTTP キャッシュを使用することができます。
|
||||||
|
|
||||||
Yii はこれら全てのキャッシュ機構をサポートしています:
|
Yii はこれら全てのキャッシュ機構をサポートしています:
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
ページキャッシュ
|
ページキャッシュ
|
||||||
================
|
================
|
||||||
|
|
||||||
ページキャッシュはサーバサイドでページ全体のコンテントをキャッシュすることを言います。あとで、同じページに再度リクエストがあった場合、その内容を一から再び生成させるのではなく、キャッシュから提供するようにします。
|
ページキャッシュはサーバサイドでページ全体のコンテントをキャッシュすることを言います。後で再び同じページがリクエストされた場合に、その内容を一から生成するのではなく、キャッシュから提供するようにします。
|
||||||
|
|
||||||
ページキャッシュは [[yii\filters\PageCache]] という [アクションフィルタ](structure-filters.md) によってサポートされています。これは、コントローラクラスで以下のように使用することができます:
|
ページキャッシュは [[yii\filters\PageCache]] という [アクションフィルタ](structure-filters.md) によってサポートされています。これは、コントローラクラスで以下のように使用することができます:
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
ビヘイビア
|
ビヘイビア
|
||||||
=========
|
==========
|
||||||
|
|
||||||
ビヘイビアは [[yii\base\Behavior]] 、あるいはその子クラスのインスタンスです。ビヘイビアは
|
ビヘイビアは [[yii\base\Behavior]] またその子クラスのインスタンスです。ビヘイビアは
|
||||||
[ミックスイン](http://en.wikipedia.org/wiki/Mixin) としても知られ、既存の [[yii\base\Component|component]] クラスの
|
[ミックスイン](http://en.wikipedia.org/wiki/Mixin) としても知られ、既存の [[yii\base\Component|component]] クラスの
|
||||||
機能を、クラスの継承を変更せずに拡張することができます。コンポーネントにビヘイビアをアタッチすると、その
|
機能を、クラスの継承を変更せずに拡張することができます。コンポーネントにビヘイビアをアタッチすると、その
|
||||||
コンポーネントにはビヘイビアのメソッドとプロパティが "注入" され、それらのメソッドとプロパティは、
|
コンポーネントにはビヘイビアのメソッドとプロパティが "注入" され、それらのメソッドとプロパティは、
|
||||||
|
@ -123,3 +123,5 @@ return [
|
|||||||
|
|
||||||
モジュールからサービスを引き出そうとする全てのリクエストは、そのモジュールが要求に応じられない場合は、すべてその親に渡されます。
|
モジュールからサービスを引き出そうとする全てのリクエストは、そのモジュールが要求に応じられない場合は、すべてその親に渡されます。
|
||||||
|
|
||||||
|
モジュール内のコンポーネントの構成情報は、親モジュール内のコンポーネントの構成情報とは決してマージされないことに注意して下さい。
|
||||||
|
サービスロケータパターンによって私たちは名前の付いたサービスを定義することが出来ますが、同じ名前のサービスが同じ構成パラメータを使用すると想定することは出来ません。
|
||||||
|
@ -209,6 +209,27 @@ $customers = Customer::findAll([
|
|||||||
]);
|
]);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
> Warning: これらのメソッドにユーザ入力を渡す必要がある場合は、入力値がスカラ値であること、または、
|
||||||
|
> 入力値が配列形式の条件である場合は配列の構造が外部から変更され得ないことを保証して下さい。
|
||||||
|
>
|
||||||
|
> ```php
|
||||||
|
> // yii\web\Controller が $id はスカラ値であることを保証しています
|
||||||
|
> public function actionView($id)
|
||||||
|
> {
|
||||||
|
> $model = Post::findOne($id);
|
||||||
|
> // ...
|
||||||
|
> }
|
||||||
|
>
|
||||||
|
> // 検索するカラムを明示的に指定する場合。
|
||||||
|
> // ここでは、どんなスカラ値または配列を渡しても、単一のレコードを発見する結果になります。
|
||||||
|
> $model = Post::findOne(['id' => Yii::$app->request->get('id')]);
|
||||||
|
>
|
||||||
|
> // 次のコードを使用してはいけません!
|
||||||
|
> // 配列形式の条件を挿入されて、任意のカラムの値による検索を実行される可能性があります!
|
||||||
|
> $model = Post::findOne(Yii::$app->request->get('id'));
|
||||||
|
> ```
|
||||||
|
|
||||||
|
|
||||||
> Note: [[yii\db\ActiveRecord::findOne()]] も [[yii\db\ActiveQuery::one()]] も、生成される SQL 文に `LIMIT 1` を追加しません。
|
> Note: [[yii\db\ActiveRecord::findOne()]] も [[yii\db\ActiveQuery::one()]] も、生成される SQL 文に `LIMIT 1` を追加しません。
|
||||||
あなたのクエリが多数のデータ行を返すかもしれない場合は、パフォーマンスを向上させるために、`limit(1)` を明示的に呼ぶべきです。
|
あなたのクエリが多数のデータ行を返すかもしれない場合は、パフォーマンスを向上させるために、`limit(1)` を明示的に呼ぶべきです。
|
||||||
例えば `Customer::find()->limit(1)->one()` のように。
|
例えば `Customer::find()->limit(1)->one()` のように。
|
||||||
|
@ -181,7 +181,7 @@ $query->where('YEAR(somedate) = 2015');
|
|||||||
$query->where("status=$status");
|
$query->where("status=$status");
|
||||||
```
|
```
|
||||||
|
|
||||||
パラメータバインディングを使う場合は、[[yii\db\Query::params()|params()]] または [[yii\db\Query::addParams()|addParams()]] を使って、パラメータの指定を分離することが出来ます。
|
`パラメータバインディング` を使う場合は、[[yii\db\Query::params()|params()]] または [[yii\db\Query::addParams()|addParams()]] を使って、パラメータの指定を分離することが出来ます。
|
||||||
|
|
||||||
```php
|
```php
|
||||||
$query->where('status=:status')
|
$query->where('status=:status')
|
||||||
@ -220,7 +220,19 @@ $query->where(['id' => $userQuery]);
|
|||||||
|
|
||||||
ハッシュ形式を使う場合、Yii は内部的にパラメータバインディングを使用します。
|
ハッシュ形式を使う場合、Yii は内部的にパラメータバインディングを使用します。
|
||||||
従って、[文字列形式](#string-format) とは対照的に、ここでは手動でパラメータを追加する必要はありません。
|
従って、[文字列形式](#string-format) とは対照的に、ここでは手動でパラメータを追加する必要はありません。
|
||||||
|
ただし、Yii はカラム名を決してエスケープしないことに注意して下さい。
|
||||||
|
従って、ユーザから取得した変数を何ら追加のチェックをすることなくカラム名として渡すと、SQL インジェクション攻撃に対して脆弱になります。
|
||||||
|
アプリケーションを安全に保つためには、カラム名として変数を使わないこと、または、変数をホワイトリストによってフィルターすることが必要です。
|
||||||
|
カラム名をユーザから取得する必要がある場合は、ガイドの [データをフィルタリングする](output-data-widgets.md#filtering-data) という記事を読んで下さい。
|
||||||
|
例えば、次のコードは脆弱です。
|
||||||
|
|
||||||
|
```php
|
||||||
|
// 脆弱なコード:
|
||||||
|
$column = $request->get('column');
|
||||||
|
$value = $request->get('value);
|
||||||
|
$query->where([$column => $value]);
|
||||||
|
// $value は安全です。しかし、$column の名前はエンコードされません。
|
||||||
|
```
|
||||||
|
|
||||||
#### 演算子形式 <span id="operator-format"></span>
|
#### 演算子形式 <span id="operator-format"></span>
|
||||||
|
|
||||||
@ -292,7 +304,19 @@ $query->where(['id' => $userQuery]);
|
|||||||
|
|
||||||
演算子形式を使う場合、Yii は内部的にパラメータバインディングを使用します。
|
演算子形式を使う場合、Yii は内部的にパラメータバインディングを使用します。
|
||||||
従って、[文字列形式](#string-format) とは対照的に、ここでは手動でパラメータを追加する必要はありません。
|
従って、[文字列形式](#string-format) とは対照的に、ここでは手動でパラメータを追加する必要はありません。
|
||||||
|
ただし、Yii はカラム名を決してエスケープしないことに注意して下さい。
|
||||||
|
従って、ユーザから取得した変数を何ら追加のチェックをすることなくカラム名として渡すと、SQL インジェクション攻撃に対して脆弱になります。
|
||||||
|
アプリケーションを安全に保つためには、カラム名として変数を使わないこと、または、変数をホワイトリストによってフィルターすることが必要です。
|
||||||
|
カラム名をユーザから取得する必要がある場合は、ガイドの [データをフィルタリングする](output-data-widgets.md#filtering-data) という記事を読んで下さい。
|
||||||
|
例えば、次のコードは脆弱です。
|
||||||
|
|
||||||
|
```php
|
||||||
|
// 脆弱なコード:
|
||||||
|
$column = $request->get('column');
|
||||||
|
$value = $request->get('value);
|
||||||
|
$query->where([$column => $value]);
|
||||||
|
// $value は安全です。しかし、$column の名前はエンコードされません。
|
||||||
|
```
|
||||||
|
|
||||||
#### オブジェクト形式 <span id="object-format"></span>
|
#### オブジェクト形式 <span id="object-format"></span>
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user