Commit 4922cb1f by Alexander Makarov

Merge pull request #7111 from softark/docs-guide-ja-structure-rev

Docs guide ja structure rev [ci skip]
parents df9a8896 4bb175a4
...@@ -274,6 +274,6 @@ Yii::$app->trigger('bar', new Event(['sender' => new Foo])); ...@@ -274,6 +274,6 @@ Yii::$app->trigger('bar', new Event(['sender' => new Foo]));
ということです。その代わりに、ハンドラのアタッチとイベントのトリガはともに、(アプリケーションのインスタンスなど) シングルトンを ということです。その代わりに、ハンドラのアタッチとイベントのトリガはともに、(アプリケーションのインスタンスなど) シングルトンを
介して行われます。 介して行われます。
しかし、グローバルイベントの名前空間はあらゆる部分から共有されているので、名前空間の整理 ("frontend.mail.sent"、"backend.mail.sent" など) しかし、グローバルイベントの名前空間はあらゆる部分から共有されているので、ある種の名前空間 ("frontend.mail.sent"、"backend.mail.sent" など)
を導入するというような、賢いグローバルイベントの名前付けをする必要があります。 を導入するというような、賢いグローバルイベントの名前付けをする必要があります。
...@@ -101,7 +101,7 @@ $customer->save(); ...@@ -101,7 +101,7 @@ $customer->save();
---------------------- ----------------------
アクティブレコードは、データベースとの間でデータを交換するために [[yii\db\Connection|DB 接続]] を使用します。 アクティブレコードは、データベースとの間でデータを交換するために [[yii\db\Connection|DB 接続]] を使用します。
既定では、アクティブレコードは `db` [アプリケーションコンポーネント](structure-application-components.md) を接続として使用します。 デフォルトでは、アクティブレコードは `db` [アプリケーションコンポーネント](structure-application-components.md) を接続として使用します。
[データベースの基礎](db-dao.md) で説明したように、次のようにして、アプリケーションの構成情報ファイルの中で `db` コンポーネントを構成することが出来ます。 [データベースの基礎](db-dao.md) で説明したように、次のようにして、アプリケーションの構成情報ファイルの中で `db` コンポーネントを構成することが出来ます。
```php ```php
...@@ -726,10 +726,10 @@ $orders = Order::find()->joinWith('books.author')->all(); ...@@ -726,10 +726,10 @@ $orders = Order::find()->joinWith('books.author')->all();
[[yii\db\ActiveQuery::joinWith()|joinWith()]] を使うときは、カラム名の曖昧さを解決することについて、あなたが責任を負わなければなりません。 [[yii\db\ActiveQuery::joinWith()|joinWith()]] を使うときは、カラム名の曖昧さを解決することについて、あなたが責任を負わなければなりません。
上記の例では、order テーブルと item テーブルがともに `id` という名前のカラムを持っているため、`item.id``order.id` を使って、`id` カラムの参照の曖昧さを解決しています。 上記の例では、order テーブルと item テーブルがともに `id` という名前のカラムを持っているため、`item.id``order.id` を使って、`id` カラムの参照の曖昧さを解決しています。
既定では、リレーションを結合すると、リレーションがイーガーロードされることにもなります。 デフォルトでは、リレーションを結合すると、リレーションがイーガーロードされることにもなります。
この既定の動作は、指定されたリレーションをイーガーロードするかどうかを規定する `$eagerLoading` パラメータを渡して、変更することが出来ます。 このデフォルトの動作は、指定されたリレーションをイーガーロードするかどうかを規定する `$eagerLoading` パラメータを渡して、変更することが出来ます。
また、既定では、[[yii\db\ActiveQuery::joinWith()|joinWith()]] は関連テーブルを結合するのに `LEFT JOIN` を使います。 また、デフォルトでは、[[yii\db\ActiveQuery::joinWith()|joinWith()]] は関連テーブルを結合するのに `LEFT JOIN` を使います。
結合タイプをカスタマイズするために `$joinType` パラメータを渡すことが出来ます。 結合タイプをカスタマイズするために `$joinType` パラメータを渡すことが出来ます。
`INNER JOIN` タイプのためのショートカットとして、[[yii\db\ActiveQuery::innerJoinWith()|innerJoinWith()]] を使うことが出来ます。 `INNER JOIN` タイプのためのショートカットとして、[[yii\db\ActiveQuery::innerJoinWith()|innerJoinWith()]] を使うことが出来ます。
...@@ -980,7 +980,7 @@ class Post extends \yii\db\ActiveRecord ...@@ -980,7 +980,7 @@ class Post extends \yii\db\ActiveRecord
楽観的ロックは、複数のユーザが編集のために同一のレコードにアクセスすることを許容しつつ、発生しうる衝突を回避するものです。 楽観的ロックは、複数のユーザが編集のために同一のレコードにアクセスすることを許容しつつ、発生しうる衝突を回避するものです。
例えば、ユーザが (別のユーザが先にデータを修正したために) 陳腐化したデータに対してレコードの保存を試みた場合は、[[\yii\db\StaleObjectException]] 例外が投げられて、更新または削除はスキップされます。 例えば、ユーザが (別のユーザが先にデータを修正したために) 陳腐化したデータに対してレコードの保存を試みた場合は、[[\yii\db\StaleObjectException]] 例外が投げられて、更新または削除はスキップされます。
楽観的ロックは、`update()``delete()` メソッドだけでサポートされ、既定では使用されません。 楽観的ロックは、`update()``delete()` メソッドだけでサポートされ、デフォルトでは使用されません。
楽観的ロックを使用するためには、 楽観的ロックを使用するためには、
......
...@@ -530,7 +530,7 @@ $db->createCommand("UPDATE user SET username='demo' WHERE id=1")->execute(); ...@@ -530,7 +530,7 @@ $db->createCommand("UPDATE user SET username='demo' WHERE id=1")->execute();
> Note|注意: [[yii\db\Connection::masters|masters]] プロパティを使って一つまたは複数のマスタを構成する場合は、データベース接続を定義する `Connection` オブジェクト自体のその他のプロパティ (例えば、`dsn`、`username`、`password`) は全て無視されます。 > Note|注意: [[yii\db\Connection::masters|masters]] プロパティを使って一つまたは複数のマスタを構成する場合は、データベース接続を定義する `Connection` オブジェクト自体のその他のプロパティ (例えば、`dsn`、`username`、`password`) は全て無視されます。
既定では、トランザクションはマスタ接続を使用します。そして、トランザクション内では、全ての DB 操作はマスタ接続を使用します。 デフォルトでは、トランザクションはマスタ接続を使用します。そして、トランザクション内では、全ての DB 操作はマスタ接続を使用します。
例えば、 例えば、
```php ```php
......
...@@ -321,14 +321,14 @@ yii migrate/up --migrationPath=@app/modules/forum/migrations ...@@ -321,14 +321,14 @@ yii migrate/up --migrationPath=@app/modules/forum/migrations
### 複数のデータベースのマイグレーション ### 複数のデータベースのマイグレーション
既定では、マイグレーションは `db` [アプリケーションコンポーネント](structure-application-components.md) によって指定されるデータベースに対して適用されます。 デフォルトでは、マイグレーションは `db` [アプリケーションコンポーネント](structure-application-components.md) によって指定されるデータベースに対して適用されます。
これは、`--db` オプションを指定することによって変更することが出来ます。例えば、 これは、`--db` オプションを指定することによって変更することが出来ます。例えば、
``` ```
yii migrate --db=db2 yii migrate --db=db2
``` ```
上記のコマンドは、既定のマイグレーションパスに置かれている *全ての* マイグレーションを `db2` データベースに適用するものです。 上記のコマンドは、デフォルトのマイグレーションパスに置かれている *全ての* マイグレーションを `db2` データベースに適用するものです。
アプリケーションが複数のデータベースを扱っている場合は、いくつかのマイグレーションはあるデータベースに適用されなければならず、他のマイグレーションは別のデータベースに適用されなければならない、ということがあり得ます。 アプリケーションが複数のデータベースを扱っている場合は、いくつかのマイグレーションはあるデータベースに適用されなければならず、他のマイグレーションは別のデータベースに適用されなければならない、ということがあり得ます。
そのような場合には、異なるデータベースごとに基底マイグレーションクラスを作成して、下記のように [[yii\db\Migration::init()]] メソッドをオーバーライドすることを推奨します。 そのような場合には、異なるデータベースごとに基底マイグレーションクラスを作成して、下記のように [[yii\db\Migration::init()]] メソッドをオーバーライドすることを推奨します。
......
...@@ -445,7 +445,7 @@ foreach ($query->each() as $user) { ...@@ -445,7 +445,7 @@ foreach ($query->each() as $user) {
[[yii\db\Query::batch()]] メソッドと [[yii\db\Query::each()]] メソッドは [[yii\db\BatchQueryResult]] オブジェクトを返します。 [[yii\db\Query::batch()]] メソッドと [[yii\db\Query::each()]] メソッドは [[yii\db\BatchQueryResult]] オブジェクトを返します。
このオブジェクトは `Iterator` インタフェイスを実装しており、従って、`foreach` 構文の中で使うことが出来ます。 このオブジェクトは `Iterator` インタフェイスを実装しており、従って、`foreach` 構文の中で使うことが出来ます。
初回の反復の際に、データベースに対する SQL クエリが作成されます。データは、その後、反復のたびにバッチモードで取得されます。 初回の反復の際に、データベースに対する SQL クエリが作成されます。データは、その後、反復のたびにバッチモードで取得されます。
既定では、バッチサイズは 100 であり、各バッチにおいて 100 行のデータが取得されます。 デフォルトでは、バッチサイズは 100 であり、各バッチにおいて 100 行のデータが取得されます。
`batch()` または `each()` メソッドに最初のパラメータを渡すことによって、バッチサイズを変更することが出来ます。 `batch()` または `each()` メソッドに最初のパラメータを渡すことによって、バッチサイズを変更することが出来ます。
[[yii\db\Query::all()]] とは対照的に、バッチクエリは一度に 100 行のデータしかメモリに読み込みません。 [[yii\db\Query::all()]] とは対照的に、バッチクエリは一度に 100 行のデータしかメモリに読み込みません。
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
> Note|注意: この節はまだ執筆中です。 > Note|注意: この節はまだ執筆中です。
Yii は、一般的なコーディングのタスク、例えば、文字列や配列の操作、HTML コードの生成などを手助けする多くのクラスを提供しています。 Yii は、一般的なコーディングのタスク、例えば、文字列や配列の操作、HTML コードの生成などを手助けする多くのクラスを提供しています。
これらのヘルパクラスは `yii\helpers` 名前空間の下に組織されており、すべてスタティックなクラス (すなわち、スタティックなプロパティとメソッドのみを含み、インスタンス化すべきでないクラス) です。 これらのヘルパクラスは `yii\helpers` 名前空間の下に編成されており、すべてスタティックなクラス (すなわち、スタティックなプロパティとメソッドのみを含み、インスタンス化すべきでないクラス) です。
ヘルパクラスは、そのスタティックなメソッドの一つを直接に呼び出すことによって使用します。 ヘルパクラスは、そのスタティックなメソッドの一つを直接に呼び出すことによって使用します。
例えば、 例えば、
......
...@@ -114,10 +114,10 @@ public function rules() ...@@ -114,10 +114,10 @@ public function rules()
[[yii\base\Model::validate()]] は、呼び出されると、バリデーションプロセスをカスタマイズするためにオーバーライドできる二つのメソッドを呼び出します。 [[yii\base\Model::validate()]] は、呼び出されると、バリデーションプロセスをカスタマイズするためにオーバーライドできる二つのメソッドを呼び出します。
* [[yii\base\Model::beforeValidate()]]: 既定の実装は [[yii\base\Model::EVENT_BEFORE_VALIDATE]] イベントをトリガするものです。 * [[yii\base\Model::beforeValidate()]]: デフォルトの実装は [[yii\base\Model::EVENT_BEFORE_VALIDATE]] イベントをトリガするものです。
このメソッドをオーバーライドするか、または、イベントに反応して、バリデーションが実行される前に、何らかの前処理 (例えば入力されたデータの正規化) をすることが出来ます。 このメソッドをオーバーライドするか、または、イベントに反応して、バリデーションが実行される前に、何らかの前処理 (例えば入力されたデータの正規化) をすることが出来ます。
このメソッドは、バリデーションを続行すべきか否かを示す真偽値を返さなくてはなりません。 このメソッドは、バリデーションを続行すべきか否かを示す真偽値を返さなくてはなりません。
* [[yii\base\Model::afterValidate()]]: 既定の実装は [[yii\base\Model::EVENT_AFTER_VALIDATE]] イベントをトリガするものです。 * [[yii\base\Model::afterValidate()]]: デフォルトの実装は [[yii\base\Model::EVENT_AFTER_VALIDATE]] イベントをトリガするものです。
このメソッドをオーバーライドするか、または、イベントに反応して、バリデーションが完了した後に、何らかの後処理をすることが出来ます。 このメソッドをオーバーライドするか、または、イベントに反応して、バリデーションが完了した後に、何らかの後処理をすることが出来ます。
...@@ -195,7 +195,7 @@ HTML フォームから入力データが送信されたとき、入力値が空 ...@@ -195,7 +195,7 @@ HTML フォームから入力データが送信されたとき、入力値が空
] ]
``` ```
既定では、入力値が空であると見なされるのは、それが、空文字列であるか、空配列であるか、null であるときです。 デフォルトでは、入力値が空であると見なされるのは、それが、空文字列であるか、空配列であるか、null であるときです。
空を検知するこのデフォルトのロジックは、[[yii\validators\Validator::isEmpty]] プロパティを PHP コーラブルで構成することによって、カスタマイズすることが出来ます。 空を検知するこのデフォルトのロジックは、[[yii\validators\Validator::isEmpty]] プロパティを PHP コーラブルで構成することによって、カスタマイズすることが出来ます。
例えば、 例えば、
...@@ -330,7 +330,7 @@ class MyForm extends Model ...@@ -330,7 +330,7 @@ class MyForm extends Model
} }
``` ```
> Note|注意: 既定では、インラインバリデータは、関連付けられている属性が空の入力値を受け取ったり、既に何らかのバリデーション規則に失敗したりしている場合には、適用されません。 > Note|注意: デフォルトでは、インラインバリデータは、関連付けられている属性が空の入力値を受け取ったり、既に何らかのバリデーション規則に失敗したりしている場合には、適用されません。
> 規則が常に適用されることを保証したい場合は、規則の宣言において [[yii\validators\Validator::skipOnEmpty|skipOnEmpty]] および/または [[yii\validators\Validator::skipOnError|skipOnError]] のプロパティを false に設定することが出来ます。 > 規則が常に適用されることを保証したい場合は、規則の宣言において [[yii\validators\Validator::skipOnEmpty|skipOnEmpty]] および/または [[yii\validators\Validator::skipOnError|skipOnError]] のプロパティを false に設定することが出来ます。
> 例えば、 > 例えば、
> >
......
...@@ -273,7 +273,7 @@ ActiveForm::end(); ...@@ -273,7 +273,7 @@ ActiveForm::end();
コンソールアプリケーション コンソールアプリケーション
-------------------------- --------------------------
コンソールアプリケーションは、ウェブアプリケーションと同じように、コントローラとして組織されるようになりました。 コンソールアプリケーションは、ウェブアプリケーションと同じように、コントローラとして編成されるようになりました。
1.1 における `CConsoleCommand` と同様に、コンソールコントローラは [[yii\console\Controller]] を拡張したものでなければなりません。 1.1 における `CConsoleCommand` と同様に、コンソールコントローラは [[yii\console\Controller]] を拡張したものでなければなりません。
コンソールコマンドを走らせるためには、`yii <route>` という構文を使います。 コンソールコマンドを走らせるためには、`yii <route>` という構文を使います。
......
...@@ -19,7 +19,7 @@ Yii を他のフレームワークと比べると ...@@ -19,7 +19,7 @@ Yii を他のフレームワークと比べると
あなたが既に他のフレームワークに親しんでいる場合は、Yii を比較するとどうなのかを知りたいでしょう。 あなたが既に他のフレームワークに親しんでいる場合は、Yii を比較するとどうなのかを知りたいでしょう。
- ほとんどの PHP フレームワーク同様、Yii は MVC (Model-View-Controller) デザインパターンを実装し、このパターンに基づいたコードの組織化を推進しています。 - ほとんどの PHP フレームワーク同様、Yii は MVC (Model-View-Controller) デザインパターンを実装し、このパターンに基づいたコードの編成を推進しています。
- Yii は、コードはシンプルかつエレガントに書かれるべきである、という哲学を採用しています。 - Yii は、コードはシンプルかつエレガントに書かれるべきである、という哲学を採用しています。
何らかのデザインパターンの厳密な遵守を主な目的とする凝りすぎた設計を、Yii がしようと試みることは決してありません。 何らかのデザインパターンの厳密な遵守を主な目的とする凝りすぎた設計を、Yii がしようと試みることは決してありません。
- Yii はフル装備のフレームワークです。 - Yii はフル装備のフレームワークです。
......
...@@ -141,7 +141,7 @@ echo GridView::widget([ ...@@ -141,7 +141,7 @@ echo GridView::widget([
'username', 'username',
// 複雑なカラム定義 // 複雑なカラム定義
[ [
'class' => 'yii\grid\DataColumn', // 省略可。これが既定値。 'class' => 'yii\grid\DataColumn', // 省略可。これがデフォルト値。
'value' => function ($data) { 'value' => function ($data) {
return $data->name; // 配列データの場合は $data['name']。例えば、SqlDataProvider を使う場合。 return $data->name; // 配列データの場合は $data['name']。例えば、SqlDataProvider を使う場合。
}, },
...@@ -388,7 +388,7 @@ echo GridView::widget([ ...@@ -388,7 +388,7 @@ echo GridView::widget([
GridView でアクティブレコードを表示するときに、リレーションのカラムの値、例えば、単に投稿者の `id` というのではなく、投稿者の名前を表示するという場合に遭遇するかも知れません。 GridView でアクティブレコードを表示するときに、リレーションのカラムの値、例えば、単に投稿者の `id` というのではなく、投稿者の名前を表示するという場合に遭遇するかも知れません。
`Post` モデルが `author` という名前のリレーションを持っていて、その投稿者のモデルが `name` という属性を持っているなら、カラムの属性名を `author.name` と定義します。 `Post` モデルが `author` という名前のリレーションを持っていて、その投稿者のモデルが `name` という属性を持っているなら、カラムの属性名を `author.name` と定義します。
そうすれば、GridView が投稿者の名前を表示するようになります。 そうすれば、GridView が投稿者の名前を表示するようになります。
ただし、並べ替えとフィルタリングは、既定では有効になりません。 ただし、並べ替えとフィルタリングは、デフォルトでは有効になりません。
これらの機能を追加するためには、前の項で導入した `PostSearch` モデルを調整しなければなりません。 これらの機能を追加するためには、前の項で導入した `PostSearch` モデルを調整しなければなりません。
リレーションのカラムによる並べ替えを有効にするためには、リレーションのテーブルを結合し、データプロバイダの Sort コンポーネントに並べ替えの規則を追加します。 リレーションのカラムによる並べ替えを有効にするためには、リレーションのテーブルを結合し、データプロバイダの Sort コンポーネントに並べ替えの規則を追加します。
......
...@@ -188,7 +188,7 @@ Content-Type: application/json; charset=UTF-8 ...@@ -188,7 +188,7 @@ Content-Type: application/json; charset=UTF-8
## まとめ <span id="summary"></span> ## まとめ <span id="summary"></span>
Yii の RESTful API フレームワークを使う場合は、API エンドポイントをコントローラアクションの形式で実装します。 Yii の RESTful API フレームワークを使う場合は、API エンドポイントをコントローラアクションの形式で実装します。
そして、コントローラを使って、単一タイプのリソースに対するエンドポイントを実装するアクションを組織化します。 そして、コントローラを使って、単一タイプのリソースに対するエンドポイントを実装するアクションを編成します。
リソースは [[yii\base\Model]] クラスを拡張するデータモデルとして表現されます。 リソースは [[yii\base\Model]] クラスを拡張するデータモデルとして表現されます。
データベース (リレーショナルまたは NoSQL) を扱っている場合は、[[yii\db\ActiveRecord|ActiveRecord]] を使ってリソースを表現することが推奨されます。 データベース (リレーショナルまたは NoSQL) を扱っている場合は、[[yii\db\ActiveRecord|ActiveRecord]] を使ってリソースを表現することが推奨されます。
......
...@@ -85,7 +85,7 @@ public function fields() ...@@ -85,7 +85,7 @@ public function fields()
} }
``` ```
> Warning|警告: 既定ではモデルの全ての属性がエクスポートされる配列に含まれるため、データを精査して、 > Warning|警告: デフォルトではモデルの全ての属性がエクスポートされる配列に含まれるため、データを精査して、
> 公開すべきでない情報が含まれていないことを確認すべきです。そういう情報がある場合は、 > 公開すべきでない情報が含まれていないことを確認すべきです。そういう情報がある場合は、
> `fields()` をオーバーライドして、除去すべきです。上記の例では、`auth_key`、`password_hash` > `fields()` をオーバーライドして、除去すべきです。上記の例では、`auth_key`、`password_hash`
> および `password_reset_token` を選んで除去しています。 > および `password_reset_token` を選んで除去しています。
......
...@@ -34,7 +34,7 @@ Accept: application/vnd.company.myapp-v1+json ...@@ -34,7 +34,7 @@ Accept: application/vnd.company.myapp-v1+json
コードの責任範囲をより良く分離するために、共通の基底のリソースとコントローラのクラスを保持して、それをバージョンごとの個別のモジュールでサブクラス化することが出来ます。 コードの責任範囲をより良く分離するために、共通の基底のリソースとコントローラのクラスを保持して、それをバージョンごとの個別のモジュールでサブクラス化することが出来ます。
サブクラスの中で、`Model::fields()` のような具体的なコードを実装します。 サブクラスの中で、`Model::fields()` のような具体的なコードを実装します。
あなたのコードを次のように組織することが出来ます。 あなたのコードを次のように編成することが出来ます。
``` ```
api/ api/
......
...@@ -9,7 +9,7 @@ Yii は、エラー処理を従来よりはるかに快適な経験にしてく ...@@ -9,7 +9,7 @@ Yii は、エラー処理を従来よりはるかに快適な経験にしてく
* エラーを表示するために専用の [コントローラアクション](structure-controllers.md#actions) を使うことがサポートされています。 * エラーを表示するために専用の [コントローラアクション](structure-controllers.md#actions) を使うことがサポートされています。
* さまざまなエラーレスポンス形式をサポートしています。 * さまざまなエラーレスポンス形式をサポートしています。
[[yii\web\ErrorHandler|エラーハンドラ]] は既定で有効になっています。 [[yii\web\ErrorHandler|エラーハンドラ]] はデフォルトで有効になっています。
アプリケーションの [エントリスクリプト](structure-entry-scripts.md) において、定数 `YII_ENABLE_ERROR_HANDLER` を false と定義することによって、これを無効にすることが出来ます。 アプリケーションの [エントリスクリプト](structure-entry-scripts.md) において、定数 `YII_ENABLE_ERROR_HANDLER` を false と定義することによって、これを無効にすることが出来ます。
...@@ -65,7 +65,7 @@ throw new NotFoundHttpException(); ...@@ -65,7 +65,7 @@ throw new NotFoundHttpException();
> Info|情報: 例外が [[yii\base\UserException]] の子孫である場合は、`YII_DEBUG` の値の如何にかかわらず、コールスタックは表示されません。 > Info|情報: 例外が [[yii\base\UserException]] の子孫である場合は、`YII_DEBUG` の値の如何にかかわらず、コールスタックは表示されません。
これは、この種の例外はユーザの誤操作によって引き起こされるものであり、開発者は何も修正する必要がないと考えられるからです。 これは、この種の例外はユーザの誤操作によって引き起こされるものであり、開発者は何も修正する必要がないと考えられるからです。
既定では、[[yii\web\ErrorHandler|エラーハンドラ]] は二つの [ビュー](structure-views.md) を使ってエラーを表示します。 デフォルトでは、[[yii\web\ErrorHandler|エラーハンドラ]] は二つの [ビュー](structure-views.md) を使ってエラーを表示します。
* `@yii/views/errorHandler/error.php`: エラーがコールスタック情報なしで表示されるべき場合に使用されます。 * `@yii/views/errorHandler/error.php`: エラーがコールスタック情報なしで表示されるべき場合に使用されます。
`YII_DEBUG` が false の場合、これが表示される唯一のビューとなります。 `YII_DEBUG` が false の場合、これが表示される唯一のビューとなります。
......
...@@ -32,9 +32,9 @@ Yii::trace('平均収益の計算を開始'); ...@@ -32,9 +32,9 @@ Yii::trace('平均収益の計算を開始');
> Info|情報: ログメッセージは文字列でも、配列やオブジェクトのような複雑なデータでも構いません。 > Info|情報: ログメッセージは文字列でも、配列やオブジェクトのような複雑なデータでも構いません。
ログメッセージを適切に取り扱うのは [ログターゲット](#log-targets) の責任です。 ログメッセージを適切に取り扱うのは [ログターゲット](#log-targets) の責任です。
既定では、ログメッセージが文字列でない場合は、[[yii\helpers\VarDumper::export()]] が呼ばれて文字列に変換されることになります。 デフォルトでは、ログメッセージが文字列でない場合は、[[yii\helpers\VarDumper::export()]] が呼ばれて文字列に変換されることになります。
ログメッセージを上手に整理しフィルタするために、すべてのログメッセージにそれぞれ適切なカテゴリを指定することが推奨されます。 ログメッセージを上手に編成しフィルタするために、すべてのログメッセージにそれぞれ適切なカテゴリを指定することが推奨されます。
カテゴリに階層的な命名方法を採用すると、[ログターゲット](#log-targets) がカテゴリに基づいてメッセージをフィルタすることが容易になります。 カテゴリに階層的な命名方法を採用すると、[ログターゲット](#log-targets) がカテゴリに基づいてメッセージをフィルタすることが容易になります。
簡単でしかも効果的な命名方法は、カテゴリ名に PHP のマジック定数 `__METHOD__` を使用することです。 簡単でしかも効果的な命名方法は、カテゴリ名に PHP のマジック定数 `__METHOD__` を使用することです。
これは、Yii フレームワークのコアコードでも使われている方法です。例えば、 これは、Yii フレームワークのコアコードでも使われている方法です。例えば、
...@@ -168,7 +168,7 @@ Yii は下記のログターゲットをあらかじめ内蔵しています。 ...@@ -168,7 +168,7 @@ Yii は下記のログターゲットをあらかじめ内蔵しています。
2014-10-04 18:10:15 [::1][][-][trace][yii\base\Module::getModule] Loading module: debug 2014-10-04 18:10:15 [::1][][-][trace][yii\base\Module::getModule] Loading module: debug
``` ```
既定では、ログメッセージは [[yii\log\Target::formatMessage()]] によって、下記のように書式設定されます。 デフォルトでは、ログメッセージは [[yii\log\Target::formatMessage()]] によって、下記のように書式設定されます。
``` ```
タイムスタンプ [IP アドレス][ユーザ ID][セッション ID][重要性レベル][カテゴリ] メッセージテキスト タイムスタンプ [IP アドレス][ユーザ ID][セッション ID][重要性レベル][カテゴリ] メッセージテキスト
...@@ -191,7 +191,7 @@ Yii は下記のログターゲットをあらかじめ内蔵しています。 ...@@ -191,7 +191,7 @@ Yii は下記のログターゲットをあらかじめ内蔵しています。
``` ```
メッセージ前置情報以外にも、ログターゲットは、一群のログメッセージごとに一定のコンテキスト情報を追加します。 メッセージ前置情報以外にも、ログターゲットは、一群のログメッセージごとに一定のコンテキスト情報を追加します。
既定では、その情報には、次のグローバル PHP 変数、すなわち、`$_GET`、`$_POST`、`$_FILES`、`$_COOKIE`、`$_SESSION` および `$_SERVER` の値が含まれます。 デフォルトでは、その情報には、次のグローバル PHP 変数、すなわち、`$_GET`、`$_POST`、`$_FILES`、`$_COOKIE`、`$_SESSION` および `$_SERVER` の値が含まれます。
ログターゲットに含ませたいグローバル変数の名前を [[yii\log\Target::logVars]] プロパティに設定することによって、この動作を調整することが出来ます。 ログターゲットに含ませたいグローバル変数の名前を [[yii\log\Target::logVars]] プロパティに設定することによって、この動作を調整することが出来ます。
例えば、次のログターゲットの構成は、`$_SERVER` の値だけがログメッセージに追加されるように指定するものです。 例えば、次のログターゲットの構成は、`$_SERVER` の値だけがログメッセージに追加されるように指定するものです。
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
========== ==========
アプリケーションに対するリクエストは、リクエストのパラメータ、HTTP ヘッダ、クッキーなどの情報を提供する [[yii\web\Request]] オブジェクトの形で表されます。 アプリケーションに対するリクエストは、リクエストのパラメータ、HTTP ヘッダ、クッキーなどの情報を提供する [[yii\web\Request]] オブジェクトの形で表されます。
与えられたリクエストに対応するリクエストオブジェクトには、既定では [[yii\web\Request]] のインスタンスである `request` [アプリケーションコンポーネント](structure-application-components.md) を通じてアクセスすることが出来ます。 与えられたリクエストに対応するリクエストオブジェクトには、デフォルトでは [[yii\web\Request]] のインスタンスである `request` [アプリケーションコンポーネント](structure-application-components.md) を通じてアクセスすることが出来ます。
この節では、アプリケーションの中でこのコンポーネントをどのように利用できるかを説明します。 この節では、アプリケーションの中でこのコンポーネントをどのように利用できるかを説明します。
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
ウェブアプリケーション開発の最終的な目的は、本質的には、さまざまなリクエストに対してそのようなレスポンスオブジェクトを作成することにあります。 ウェブアプリケーション開発の最終的な目的は、本質的には、さまざまなリクエストに対してそのようなレスポンスオブジェクトを作成することにあります。
ほとんどの場合は、主として `response` [アプリケーションコンポーネント](structure-application-components.md) を使用すべきです。 ほとんどの場合は、主として `response` [アプリケーションコンポーネント](structure-application-components.md) を使用すべきです。
このコンポーネントは、既定では、[[yii\web\Response]] のインスタンスです。 このコンポーネントは、デフォルトでは、[[yii\web\Response]] のインスタンスです。
しかしながら、Yii は、以下で説明するように、あなた自身のレスポンスオブジェクトを作成してエンドユーザに送信することも許容しています。 しかしながら、Yii は、以下で説明するように、あなた自身のレスポンスオブジェクトを作成してエンドユーザに送信することも許容しています。
この節では、レスポンスを構成してエンドユーザに送信する方法を説明します。 この節では、レスポンスを構成してエンドユーザに送信する方法を説明します。
...@@ -23,7 +23,7 @@ Yii::$app->response->statusCode = 200; ...@@ -23,7 +23,7 @@ Yii::$app->response->statusCode = 200;
``` ```
けれども、たいていの場合、ステータスコードを明示的に設定する必要はありません。 けれども、たいていの場合、ステータスコードを明示的に設定する必要はありません。
これは、[[yii\web\Response::statusCode]] の既定値が 200 であるからです。 これは、[[yii\web\Response::statusCode]] のデフォルト値が 200 であるからです。
そして、リクエストが失敗したことを示したいときは、下記のように、適切な HTTP 例外を投げることが出来ます。 そして、リクエストが失敗したことを示したいときは、下記のように、適切な HTTP 例外を投げることが出来ます。
```php ```php
...@@ -183,7 +183,7 @@ public function actionOld() ...@@ -183,7 +183,7 @@ public function actionOld()
\Yii::$app->response->redirect('http://example.com/new', 301)->send(); \Yii::$app->response->redirect('http://example.com/new', 301)->send();
``` ```
> Info|情報: 既定では、[[yii\web\Response::redirect()]] メソッドはレスポンスのステータスコードを 302 にセットします。 > Info|情報: デフォルトでは、[[yii\web\Response::redirect()]] メソッドはレスポンスのステータスコードを 302 にセットします。
これはブラウザに対して、リクエストされているリソースが *一時的に* 異なる URI に配置されていることを示すものです。 これはブラウザに対して、リクエストされているリソースが *一時的に* 異なる URI に配置されていることを示すものです。
ブラウザに対してリソースが *恒久的に* 配置替えされたことを教えるためには、ステータスコード 301 を渡すことが出来ます。 ブラウザに対してリソースが *恒久的に* 配置替えされたことを教えるためには、ステータスコード 301 を渡すことが出来ます。
...@@ -238,7 +238,7 @@ public function actionDownload() ...@@ -238,7 +238,7 @@ public function actionDownload()
## レスポンスを送信する <span id="sending-response"></span> ## レスポンスを送信する <span id="sending-response"></span>
レスポンスの中のコンテントは、[[yii\web\Response::send()]] メソッドが呼ばれるまでは、エンドユーザに向けて送信されません。 レスポンスの中のコンテントは、[[yii\web\Response::send()]] メソッドが呼ばれるまでは、エンドユーザに向けて送信されません。
既定では、このメソッドは [[yii\base\Application::run()]] の最後で自動的に呼ばれます。 デフォルトでは、このメソッドは [[yii\base\Application::run()]] の最後で自動的に呼ばれます。
しかし、このメソッドを明示的に呼んで、強制的にレスポンスを即座に送信することも可能です。 しかし、このメソッドを明示的に呼んで、強制的にレスポンスを即座に送信することも可能です。
[[yii\web\Response::send()]] メソッドは次のステップを踏んでレスポンスを送出します。 [[yii\web\Response::send()]] メソッドは次のステップを踏んでレスポンスを送出します。
......
...@@ -84,7 +84,7 @@ $url = Url::to(['post/view', 'id' => 100]); ...@@ -84,7 +84,7 @@ $url = Url::to(['post/view', 'id' => 100]);
### デフォルトルート <span id="default-route"></span> ### デフォルトルート <span id="default-route"></span>
リクエストから解析されたルートが空になった場合は、いわゆる *デフォルトルート* が代りに使用されることになります。 リクエストから解析されたルートが空になった場合は、いわゆる *デフォルトルート* が代りに使用されることになります。
既定では、デフォルトルートは `site/index` であり、`site` コントローラの `index` アクションを指します。 デフォルトでは、デフォルトルートは `site/index` であり、`site` コントローラの `index` アクションを指します。
デフォルトルートは、次のように、アプリケーションの構成情報の中でアプリケーションの [[yii\web\Application::defaultRoute|defaultRoute]] プロパティを構成することによって、カスタマイズすることが出来ます。 デフォルトルートは、次のように、アプリケーションの構成情報の中でアプリケーションの [[yii\web\Application::defaultRoute|defaultRoute]] プロパティを構成することによって、カスタマイズすることが出来ます。
```php ```php
...@@ -296,7 +296,7 @@ URL 隕丞援縺ッ縲√後ヱ繧ソ繝シ繝ウ - 繝ォ繝シ繝医阪繝壹い縺ィ縺励※螳」險縺吶k莉・ ...@@ -296,7 +296,7 @@ URL 隕丞援縺ッ縲√後ヱ繧ソ繝シ繝ウ - 繝ォ繝シ繝医阪繝壹い縺ィ縺励※螳」險縺吶k莉・
] ]
``` ```
規則の構成情報で `class` を指定しない場合は、既定として、[[yii\web\UrlRule]] が使われます。 規則の構成情報で `class` を指定しない場合は、デフォルトとして、[[yii\web\UrlRule]] が使われます。
### 名前付きパラメータ <span id="named-parameters"></span> ### 名前付きパラメータ <span id="named-parameters"></span>
...@@ -327,7 +327,7 @@ URL 隕丞援縺ッ縲√ヱ繧ソ繝シ繝ウ縺ョ荳ュ縺ァ `<ParamName:RgExp>` 縺ョ蠖「蠑上〒謖ョ壹& ...@@ -327,7 +327,7 @@ URL 隕丞援縺ッ縲√ヱ繧ソ繝シ繝ウ縺ョ荳ュ縺ァ `<ParamName:RgExp>` 縺ョ蠖「蠑上〒謖ョ壹&
- `/index.php/posts/2014/php` は、最初の規則を使って解析され、ルートは `post/index`、`year` パラメータの値は 2014、そして、`category` パラメータの値は `php` となります。 - `/index.php/posts/2014/php` は、最初の規則を使って解析され、ルートは `post/index`、`year` パラメータの値は 2014、そして、`category` パラメータの値は `php` となります。
- `/index.php/post/100` は、三番目の規則を使って解析され、ルートが `post/view`、`id` パラメータの値が 100 となります。 - `/index.php/post/100` は、三番目の規則を使って解析され、ルートが `post/view`、`id` パラメータの値が 100 となります。
- `/index.php/posts/php` は、どのパターンにも合致しないため、[[yii\web\UrlManager::enableStrictParsing]] が true の場合は、[[yii\web\NotFoundHttpException]] を引き起こします。 - `/index.php/posts/php` は、どのパターンにも合致しないため、[[yii\web\UrlManager::enableStrictParsing]] が true の場合は、[[yii\web\NotFoundHttpException]] を引き起こします。
[[yii\web\UrlManager::enableStrictParsing]] が false (これが既定値です) の場合は、パス情報の部分である `posts/php` がルートとして返されることになります。 [[yii\web\UrlManager::enableStrictParsing]] が false (これがデフォルト値です) の場合は、パス情報の部分である `posts/php` がルートとして返されることになります。
規則が URL 生成に使われる場合は、 規則が URL 生成に使われる場合は、
...@@ -360,7 +360,7 @@ URL 隕丞援縺ョ繝ォ繝シ繝医↓縺ッ繝代Λ繝。繝シ繧ソ蜷阪r蝓九a霎シ繧縺薙→縺悟譚・縺セ ...@@ -360,7 +360,7 @@ URL 隕丞援縺ョ繝ォ繝シ繝医↓縺ッ繝代Λ繝。繝シ繧ソ蜷阪r蝓九a霎シ繧縺薙→縺悟譚・縺セ
> Info|情報: ルートをパラメータ化することによって、URL 規則の数を大幅に減らすことが可能になり、[[yii\web\UrlManager|URL マネージャ]] のパフォーマンスを目に見えて改善することが出来ます。 > Info|情報: ルートをパラメータ化することによって、URL 規則の数を大幅に減らすことが可能になり、[[yii\web\UrlManager|URL マネージャ]] のパフォーマンスを目に見えて改善することが出来ます。
既定では、規則の中で宣言されたパラメータは必須となります。 デフォルトでは、規則の中で宣言されたパラメータは必須となります。
リクエストされた URL が特定のパラメータを含まない場合や、URL が特定のパラメータなしで生成される場合には、規則は適用されません。 リクエストされた URL が特定のパラメータを含まない場合や、URL が特定のパラメータなしで生成される場合には、規則は適用されません。
パラメータのどれかをオプション扱いにしたい場合は、規則の [[yii\web\UrlRule::defaults|defaults]] プロパティを構成することが出来ます。 パラメータのどれかをオプション扱いにしたい場合は、規則の [[yii\web\UrlRule::defaults|defaults]] プロパティを構成することが出来ます。
このプロパティのリストに挙げられたパラメータはオプション扱いとなり、規定されなかった場合は指定された値を取るようになります。 このプロパティのリストに挙げられたパラメータはオプション扱いとなり、規定されなかった場合は指定された値を取るようになります。
...@@ -516,7 +516,7 @@ RESTful API 繧貞ョ溯」☆繧九→縺阪縲∽スソ逕ィ縺輔l縺ヲ縺k HTTP 繝。繧ス繝ラ縺 ...@@ -516,7 +516,7 @@ RESTful API 繧貞ョ溯」☆繧九→縺阪縲∽スソ逕ィ縺輔l縺ヲ縺k HTTP 繝。繧ス繝ラ縺
] ]
``` ```
> Info|情報: 規則の構成情報で `class` を指定しない場合は、既定として、[[yii\web\UrlRule]] クラスが使われます。 > Info|情報: 規則の構成情報で `class` を指定しない場合は、デフォルトとして、[[yii\web\UrlRule]] クラスが使われます。
### 規則を動的に追加する <span id="adding-rules"></span> ### 規則を動的に追加する <span id="adding-rules"></span>
......
...@@ -8,7 +8,7 @@ Yii 縺ッ繧サ繝す繝ァ繝ウ縺ィ繧ッ繝く繝シ繧偵が繝悶ず繧ァ繧ッ繝医→縺励※繧ォ繝励そ繝ォ ...@@ -8,7 +8,7 @@ Yii 縺ッ繧サ繝す繝ァ繝ウ縺ィ繧ッ繝く繝シ繧偵が繝悶ず繧ァ繧ッ繝医→縺励※繧ォ繝励そ繝ォ
## セッション <span id="sessions"></span> ## セッション <span id="sessions"></span>
[リクエスト](runtime-requests.md)[レスポンス](runtime-responses.md) と同じように、既定では [[yii\web\Session]] のインスタンスである `session` [アプリケーションコンポーネント] によって、セッションにアクセスすることが出来ます。 [リクエスト](runtime-requests.md)[レスポンス](runtime-responses.md) と同じように、デフォルトでは [[yii\web\Session]] のインスタンスである `session` [アプリケーションコンポーネント] によって、セッションにアクセスすることが出来ます。
### セッションのオープンとクローズ <span id="opening-closing-sessions"></span> ### セッションのオープンとクローズ <span id="opening-closing-sessions"></span>
...@@ -121,7 +121,7 @@ $session['captcha.lifetime'] = 3600; ...@@ -121,7 +121,7 @@ $session['captcha.lifetime'] = 3600;
### カスタムセッションストレージ <span id="custom-session-storage"></span> ### カスタムセッションストレージ <span id="custom-session-storage"></span>
既定の [[yii\web\Session]] クラスはセッションデータをサーバ上のファイルとして保存します。 デフォルトの [[yii\web\Session]] クラスはセッションデータをサーバ上のファイルとして保存します。
Yii は、また、さまざまなセッションストレージを実装する下記のクラスをも提供しています。 Yii は、また、さまざまなセッションストレージを実装する下記のクラスをも提供しています。
* [[yii\web\DbSession]]: セッションデータをデータベーステーブルを使って保存する。 * [[yii\web\DbSession]]: セッションデータをデータベーステーブルを使って保存する。
......
...@@ -44,7 +44,7 @@ defined('YII_ENV') or define('YII_ENV', 'dev'); ...@@ -44,7 +44,7 @@ defined('YII_ENV') or define('YII_ENV', 'dev');
http://hostname/index.php?r=gii http://hostname/index.php?r=gii
``` ```
> Note|注意: ローカルホスト以外のマシンから Gii にアクセスしようとすると、既定ではセキュリティ上の理由でアクセスが拒否されます。 > Note|注意: ローカルホスト以外のマシンから Gii にアクセスしようとすると、デフォルトではセキュリティ上の理由でアクセスが拒否されます。
> 下記のように Gii を構成して、許可される IP アドレスを追加することが出来ます。 > 下記のように Gii を構成して、許可される IP アドレスを追加することが出来ます。
> >
```php ```php
......
...@@ -109,7 +109,7 @@ http://hostname/index.php?r=site/say&message=Hello+World ...@@ -109,7 +109,7 @@ http://hostname/index.php?r=site/say&message=Hello+World
このページはアプリケーションの他のページと同じヘッダとフッタを共有しています。 このページはアプリケーションの他のページと同じヘッダとフッタを共有しています。
URL から `message` パラメータを省略すると、"こんにちは" を表示するページを見ることになるでしょう。 URL から `message` パラメータを省略すると、"こんにちは" を表示するページを見ることになるでしょう。
これは、`message``actionSay()` メソッドにパラメータとして渡されるものであり、それが省略された場合には、既定値である `"こんにちは"` が代りに使われるからです。 これは、`message``actionSay()` メソッドにパラメータとして渡されるものであり、それが省略された場合には、デフォルト値である `"こんにちは"` が代りに使われるからです。
> Info|情報: 新しいページは他のページと同じヘッダとフッタを共有していますが、それは [[yii\web\Controller::render()|render()]] メソッドが `say` ビューの結果をいわゆる [レイアウト](structure-views.md#layouts) に自動的に埋め込むからです。 > Info|情報: 新しいページは他のページと同じヘッダとフッタを共有していますが、それは [[yii\web\Controller::render()|render()]] メソッドが `say` ビューの結果をいわゆる [レイアウト](structure-views.md#layouts) に自動的に埋め込むからです。
レイアウトは、この場合、`views/layouts/main.php` にあります。 レイアウトは、この場合、`views/layouts/main.php` にあります。
......
...@@ -6,7 +6,7 @@ Yii 縺ッ莠後▽縺ョ譁ケ豕輔〒繧、繝ウ繧ケ繝医繝ォ縺吶k縺薙→縺悟譚・縺セ縺吶ゅ☆縺ェ ...@@ -6,7 +6,7 @@ Yii 縺ッ莠後▽縺ョ譁ケ豕輔〒繧、繝ウ繧ケ繝医繝ォ縺吶k縺薙→縺悟譚・縺セ縺吶ゅ☆縺ェ
Yii の標準的なインストールを実行すると、フレームワークとアプリケーションテンプレートの両方がダウンロードされてインストールされます。 Yii の標準的なインストールを実行すると、フレームワークとアプリケーションテンプレートの両方がダウンロードされてインストールされます。
アプリケーションテンプレートは、いくつかの基本的な機能、例えば、ログインやコンタクトフォームなどを実装した、動作する Yii アプリケーションです。 アプリケーションテンプレートは、いくつかの基本的な機能、例えば、ログインやコンタクトフォームなどを実装した、動作する Yii アプリケーションです。
そのコードは推奨される方法に従って組織されています。 そのコードは推奨される方法に従って編成されています。
そのため、アプリケーションテンプレートは、あなたのプロジェクトのための良い開始点としての役割を果たしうるものです。 そのため、アプリケーションテンプレートは、あなたのプロジェクトのための良い開始点としての役割を果たしうるものです。
この節と後続のいくつかの節においては、いわゆる *ベーシックアプリケーションテンプレート* とともに Yii をインストールする方法、および、このテンプレート上に新しい機能を実装する方法を説明します。 この節と後続のいくつかの節においては、いわゆる *ベーシックアプリケーションテンプレート* とともに Yii をインストールする方法、および、このテンプレート上に新しい機能を実装する方法を説明します。
...@@ -14,7 +14,7 @@ Yii 縺ッ繧ゅ≧荳縺、縲ー繧「繝峨ヰ繝ウ繧ケ繝医い繝励Μ繧ア繝シ繧キ繝ァ繝ウ繝Φ繝励Ξ繝シ ...@@ -14,7 +14,7 @@ Yii 縺ッ繧ゅ≧荳縺、縲ー繧「繝峨ヰ繝ウ繧ケ繝医い繝励Μ繧ア繝シ繧キ繝ァ繝ウ繝Φ繝励Ξ繝シ
こちらは、チーム開発環境において多層構造のアプリケーションを開発するときに使用する方が望ましいものです。 こちらは、チーム開発環境において多層構造のアプリケーションを開発するときに使用する方が望ましいものです。
> Info|情報: ベーシックアプリケーションテンプレートは、ウェブアプリケーションの 90 パーセントを開発するのに適したものです。 > Info|情報: ベーシックアプリケーションテンプレートは、ウェブアプリケーションの 90 パーセントを開発するのに適したものです。
アドバンストアプリケーションテンプレートとの主な違いは、コードがどのように組織されているかという点にあります。 アドバンストアプリケーションテンプレートとの主な違いは、コードがどのように編成されているかという点にあります。
あなたが Yii は初めてだという場合は、シンプルでありながら十分な機能を持っているベーシックアプリケーションテンプレートに留まることを強く推奨します。 あなたが Yii は初めてだという場合は、シンプルでありながら十分な機能を持っているベーシックアプリケーションテンプレートに留まることを強く推奨します。
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
Yii のインストールが終ると、実際に動く Yii のアプリケーションにアクセスすることが出来ます。 Yii のインストールが終ると、実際に動く Yii のアプリケーションにアクセスすることが出来ます。
その URL は、`http://hostname/basic/web/index.php` あるいは `http://hostname/index.php` など、設定によって異なります。 その URL は、`http://hostname/basic/web/index.php` あるいは `http://hostname/index.php` など、設定によって異なります。
この節では、アプリケーションに組み込み済みの機能を紹介し、コードがどのように組織されているか、そして、一般にアプリケーションがリクエストをどのように処理するかを説明します。 この節では、アプリケーションに組み込み済みの機能を紹介し、コードがどのように編成されているか、そして、一般にアプリケーションがリクエストをどのように処理するかを説明します。
> Info|情報: 話を簡単にするために、この「始めよう」のチュートリアルを通じて、`basic/web` をウェブサーバのドキュメントルートとして設定したと仮定します。 > Info|情報: 話を簡単にするために、この「始めよう」のチュートリアルを通じて、`basic/web` をウェブサーバのドキュメントルートとして設定したと仮定します。
そして、アプリケーションにアクセスするための URL は `http://hostname/index.php` またはそれに似たものになるように設定したと仮定します。 そして、アプリケーションにアクセスするための URL は `http://hostname/index.php` またはそれに似たものになるように設定したと仮定します。
......
...@@ -214,7 +214,7 @@ if (YII_ENV_DEV) { ...@@ -214,7 +214,7 @@ if (YII_ENV_DEV) {
#### [[yii\base\Application::controllerMap|controllerMap]] <span id="controllerMap"></span> #### [[yii\base\Application::controllerMap|controllerMap]] <span id="controllerMap"></span>
このプロパティは、コントローラ ID を任意のコントローラクラスに割り付けることを可能にするものです。 このプロパティは、コントローラ ID を任意のコントローラクラスに割り付けることを可能にするものです。
既定では、Yii は [規約](#controllerNamespace) に基づいてコントローラ ID をコントローラクラスに割り付けます デフォルトでは、Yii は [規約](#controllerNamespace) に基づいてコントローラ ID をコントローラクラスに割り付けます
(例えば、`post` という ID は `app\controllers\PostController` に割り付けられます)。 (例えば、`post` という ID は `app\controllers\PostController` に割り付けられます)。
このプロパティを構成することによって、特定のコントローラに対する規約を破ることが出来ます。 このプロパティを構成することによって、特定のコントローラに対する規約を破ることが出来ます。
下記の例では、`account` は `app\controllers\UserController` に割り付けられ、`article` は `app\controllers\PostController` に割り付けられることになります。 下記の例では、`account` は `app\controllers\UserController` に割り付けられ、`article` は `app\controllers\PostController` に割り付けられることになります。
...@@ -258,7 +258,7 @@ if (YII_ENV_DEV) { ...@@ -258,7 +258,7 @@ if (YII_ENV_DEV) {
アプリケーションが多言語をサポートする必要があるときは、このプロパティを構成しなければなりません。 アプリケーションが多言語をサポートする必要があるときは、このプロパティを構成しなければなりません。
このプロパティの値が、メッセージの翻訳、日付の書式、数字の書式などを含む [国際化](tutorial-i18n.md) のさまざまな側面を決定します。 このプロパティの値が、メッセージの翻訳、日付の書式、数字の書式などを含む [国際化](tutorial-i18n.md) のさまざまな側面を決定します。
例えば、[[yii\jui\DatePicker]] ウィジェットは、どの言語でカレンダーを表示すべきか、そして日付をどのように書式設定すべきかを、既定では、このプロパティを使用して決定します。 例えば、[[yii\jui\DatePicker]] ウィジェットは、どの言語でカレンダーを表示すべきか、そして日付をどのように書式設定すべきかを、デフォルトでは、このプロパティを使用して決定します。
言語を指定するのには、[IETF 言語タグ](http://ja.wikipedia.org/wiki/IETF%E8%A8%80%E8%AA%9E%E3%82%BF%E3%82%B0) に従うことが推奨されます。 言語を指定するのには、[IETF 言語タグ](http://ja.wikipedia.org/wiki/IETF%E8%A8%80%E8%AA%9E%E3%82%BF%E3%82%B0) に従うことが推奨されます。
例えば、`en` は英語を意味し、`en-US` はアメリカ合衆国の英語を意味します。 例えば、`en` は英語を意味し、`en-US` はアメリカ合衆国の英語を意味します。
......
...@@ -109,7 +109,7 @@ class AppAsset extends AssetBundle ...@@ -109,7 +109,7 @@ class AppAsset extends AssetBundle
アセットバンドルクラスを定義するときには [[yii\web\AssetBundle::sourcePath|sourcePath]] プロパティを指定しなければなりません。 アセットバンドルクラスを定義するときには [[yii\web\AssetBundle::sourcePath|sourcePath]] プロパティを指定しなければなりません。
> Note|注意: `@webroot/assets` を [[yii\web\AssetBundle::sourcePath|ソースパス]] として使ってはいけません。 > Note|注意: `@webroot/assets` を [[yii\web\AssetBundle::sourcePath|ソースパス]] として使ってはいけません。
このディレクトリは、既定では、[[yii\web\AssetManager|アセットマネージャ]] がソースの配置場所から発行されたアセットファイルを保存する場所として使われます。 このディレクトリは、デフォルトでは、[[yii\web\AssetManager|アセットマネージャ]] がソースの配置場所から発行されたアセットファイルを保存する場所として使われます。
このディレクトリの中のファイルはすべて一時的なものと見なされており、削除されることがあります。 このディレクトリの中のファイルはすべて一時的なものと見なされており、削除されることがあります。
...@@ -157,13 +157,13 @@ public $cssOptions = ['noscript' => true]; ...@@ -157,13 +157,13 @@ public $cssOptions = ['noscript' => true];
``` ```
JavaScript ファイルをページの head セクションにインクルードするためには、次のオプションを使います JavaScript ファイルをページの head セクションにインクルードするためには、次のオプションを使います
(既定では、JavaScript ファイルは body セクションの最後にインクルードされます)。 (デフォルトでは、JavaScript ファイルは body セクションの最後にインクルードされます)。
```php ```php
public $jsOptions = ['position' => \yii\web\View::POS_HEAD]; public $jsOptions = ['position' => \yii\web\View::POS_HEAD];
``` ```
既定では、アセットバンドルが発行されるときは、[[yii\web\AssetBundle::sourcePath]] で指定されたディレクトリの中にある全てのコンテントが発行されます。 デフォルトでは、アセットバンドルが発行されるときは、[[yii\web\AssetBundle::sourcePath]] で指定されたディレクトリの中にある全てのコンテントが発行されます。
[[yii\web\AssetBundle::publishOptions|publishOptions]] プロパティを構成することによって、この振る舞いをカスタマイズすることが出来ます。 [[yii\web\AssetBundle::publishOptions|publishOptions]] プロパティを構成することによって、この振る舞いをカスタマイズすることが出来ます。
例えば、[[yii\web\AssetBundle::sourcePath]] の一個または数個のサブディレクトリだけを発行するために、アセットバンドルクラスの中で下記のようにすることが出来ます。 例えば、[[yii\web\AssetBundle::sourcePath]] の一個または数個のサブディレクトリだけを発行するために、アセットバンドルクラスの中で下記のようにすることが出来ます。
...@@ -328,7 +328,7 @@ return [ ...@@ -328,7 +328,7 @@ return [
既に述べたように、アセットバンドルがウェブからアクセス出来ないディレクトリに配置されている場合は、バンドルがビューに登録されるときに、アセットがウェブディレクトリにコピーされます。 既に述べたように、アセットバンドルがウェブからアクセス出来ないディレクトリに配置されている場合は、バンドルがビューに登録されるときに、アセットがウェブディレクトリにコピーされます。
このプロセスは *アセット発行* と呼ばれ、[[yii\web\AssetManager|アセットマネージャ]] によって自動的に実行されます。 このプロセスは *アセット発行* と呼ばれ、[[yii\web\AssetManager|アセットマネージャ]] によって自動的に実行されます。
既定では、アセットが発行されるディレクトリは `@webroot/assets` であり、`@web/assets` という URL に対応するものです。 デフォルトでは、アセットが発行されるディレクトリは `@webroot/assets` であり、`@web/assets` という URL に対応するものです。
この場所は、[[yii\web\AssetManager::basePath|basePath]] と [[yii\web\AssetManager::baseUrl|baseUrl]] のプロパティを構成してカスタマイズすることが出来ます。 この場所は、[[yii\web\AssetManager::basePath|basePath]] と [[yii\web\AssetManager::baseUrl|baseUrl]] のプロパティを構成してカスタマイズすることが出来ます。
ファイルをコピーすることでアセットを発行する代りに、OS とウェブサーバが許容するなら、シンボリックリンクを使うことを考慮しても良いでしょう。 ファイルをコピーすることでアセットを発行する代りに、OS とウェブサーバが許容するなら、シンボリックリンクを使うことを考慮しても良いでしょう。
...@@ -355,7 +355,7 @@ return [ ...@@ -355,7 +355,7 @@ return [
その中で、下記のバンドルはよく使われるものであり、あなたのアプリケーションやエクステンションのコードでも参照することが出来るものです。 その中で、下記のバンドルはよく使われるものであり、あなたのアプリケーションやエクステンションのコードでも参照することが出来るものです。
- [[yii\web\YiiAsset]]: 主として `yii.js` ファイルをインクルードするためのバンドルです。 - [[yii\web\YiiAsset]]: 主として `yii.js` ファイルをインクルードするためのバンドルです。
このファイルはモジュール化された JavaScript のコードを組織化するメカニズムを実装しています。 このファイルはモジュール化された JavaScript のコードを編成するメカニズムを実装しています。
また、`data-method``data-confirm` の属性に対する特別なサポートや、その他の有用な機能を提供します。 また、`data-method``data-confirm` の属性に対する特別なサポートや、その他の有用な機能を提供します。
- [[yii\web\JqueryAsset]]: jQuery の bower パッケージから `jquery.js` ファイルをインクルードします。 - [[yii\web\JqueryAsset]]: jQuery の bower パッケージから `jquery.js` ファイルをインクルードします。
- [[yii\bootstrap\BootstrapAsset]]: Twitter Bootstrap フレームワークから CSS ファイルをインクルードします。 - [[yii\bootstrap\BootstrapAsset]]: Twitter Bootstrap フレームワークから CSS ファイルをインクルードします。
...@@ -584,7 +584,7 @@ return [ ...@@ -584,7 +584,7 @@ return [
JavaScript ファイルは結合され、圧縮されて `js/all-{hash}.js` に保存されます。ここで {hash} は、結果として作られたファイルのハッシュで置き換えられるものです。 JavaScript ファイルは結合され、圧縮されて `js/all-{hash}.js` に保存されます。ここで {hash} は、結果として作られたファイルのハッシュで置き換えられるものです。
`jsCompressor``cssCompressor` のオプションは、JavaScript と CSS の結合/圧縮を実行するコンソールコマンドまたは PHP コールバックを指定するものです。 `jsCompressor``cssCompressor` のオプションは、JavaScript と CSS の結合/圧縮を実行するコンソールコマンドまたは PHP コールバックを指定するものです。
既定では、Yii は JavaScript ファイルの結合に [Closure Compiler](https://developers.google.com/closure/compiler/) を使い、CSS ファイルの結合に [YUI Compressor](https://github.com/yui/yuicompressor/) を使用します。 デフォルトでは、Yii は JavaScript ファイルの結合に [Closure Compiler](https://developers.google.com/closure/compiler/) を使い、CSS ファイルの結合に [YUI Compressor](https://github.com/yui/yuicompressor/) を使用します。
あなたの好みのツールを使うためには、手作業でツールをインストールしたり、オプションを調整したりしなければなりません。 あなたの好みのツールを使うためには、手作業でツールをインストールしたり、オプションを調整したりしなければなりません。
この構成情報ファイルを使い、`asset` コマンドを走らせて、アセットファイルを結合して圧縮し、同時に、新しいアセットバンドルの構成情報ファイル `assets-prod.php` を生成することが出来ます。 この構成情報ファイルを使い、`asset` コマンドを走らせて、アセットファイルを結合して圧縮し、同時に、新しいアセットバンドルの構成情報ファイル `assets-prod.php` を生成することが出来ます。
......
...@@ -139,7 +139,7 @@ class SiteController extends Controller ...@@ -139,7 +139,7 @@ class SiteController extends Controller
一方、`admin/post2-comment` コントローラは `@app/controllers/admin/Post2CommentController.php` というエイリアスのファイルに保存されるべきものとなります。 一方、`admin/post2-comment` コントローラは `@app/controllers/admin/Post2CommentController.php` というエイリアスのファイルに保存されるべきものとなります。
> Info|情報: 最後の例である `admin/post2-comment` は、どうすれば [[yii\base\Application::controllerNamespace|コントローラ名前空間]] のサブディレクトリにコントローラを置くことが出来るかを示しています。 > Info|情報: 最後の例である `admin/post2-comment` は、どうすれば [[yii\base\Application::controllerNamespace|コントローラ名前空間]] のサブディレクトリにコントローラを置くことが出来るかを示しています。
この方法は、コントローラをいくつかのカテゴリに分けて整理したい、けれども [モジュール](structure-modules.md) は使いたくない、という場合に役立ちます。 この方法は、コントローラをいくつかのカテゴリに分けて編成したい、けれども [モジュール](structure-modules.md) は使いたくない、という場合に役立ちます。
### コントローラマップ <span id="controller-map"></span> ### コントローラマップ <span id="controller-map"></span>
......
...@@ -62,7 +62,7 @@ $config = require(__DIR__ . '/../config/web.php'); ...@@ -62,7 +62,7 @@ $config = require(__DIR__ . '/../config/web.php');
defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_DEBUG') or define('YII_DEBUG', true);
// fcgi が既定では STDIN と STDOUT を定義していないので // デフォルトでは fcgi が STDIN と STDOUT を定義していないので
defined('STDIN') or define('STDIN', fopen('php://stdin', 'r')); defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w')); defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
...@@ -89,12 +89,12 @@ Yii は下記の三つの定数をサポートしています。 ...@@ -89,12 +89,12 @@ Yii は下記の三つの定数をサポートしています。
* `YII_DEBUG`: アプリケーションがデバッグモードで走るかどうかを指定します。 * `YII_DEBUG`: アプリケーションがデバッグモードで走るかどうかを指定します。
デバッグモードにおいては、アプリケーションはより多くのログ情報を保持し、例外が投げられたときに、より詳細なエラーのコールスタックを表示します。 デバッグモードにおいては、アプリケーションはより多くのログ情報を保持し、例外が投げられたときに、より詳細なエラーのコールスタックを表示します。
この理由により、デバッグモードは主として開発時に使用されるべきものとなります。 この理由により、デバッグモードは主として開発時に使用されるべきものとなります。
`YII_DEBUG`既定値は false です。 `YII_DEBUG`デフォルト値は false です。
* `YII_ENV`: どういう環境でアプリケーションが走っているかを指定します。 * `YII_ENV`: どういう環境でアプリケーションが走っているかを指定します。
詳細は、[構成情報](concept-configurations.md#environment-constants) の節で説明されます。 詳細は、[構成情報](concept-configurations.md#environment-constants) の節で説明されます。
`YII_ENV`既定値は `'prod'` であり、アプリケーションが本番環境で走っていることを意味します。 `YII_ENV`デフォルト値は `'prod'` であり、アプリケーションが本番環境で走っていることを意味します。
* `YII_ENABLE_ERROR_HANDLER`: Yii によって提供されるエラーハンドラを有効にするかどうかを指定します。 * `YII_ENABLE_ERROR_HANDLER`: Yii によって提供されるエラーハンドラを有効にするかどうかを指定します。
この定数の既定値は true です。 この定数のデフォルト値は true です。
定数を定義するときには、しばしば次のようなコードを用います。 定数を定義するときには、しばしば次のようなコードを用います。
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
[Composer](https://getcomposer.org/) を持っていない場合は、それをインストールする必要があることに注意してください。 [Composer](https://getcomposer.org/) を持っていない場合は、それをインストールする必要があることに注意してください。
既定では、Composer は [Packagist](https://packagist.org/) に登録されたパッケージをインストールします。 デフォルトでは、Composer は [Packagist](https://packagist.org/) に登録されたパッケージをインストールします。
Packagist はオープンソース Composer パッケージの最大のレポジトリであり、そこでエクステンションを探すことが出来ます。 Packagist はオープンソース Composer パッケージの最大のレポジトリであり、そこでエクステンションを探すことが出来ます。
また、[自分自身のレポジトリを作成](https://getcomposer.org/doc/05-repositories.md#repository) して、それを使うように Composer を構成することも出来ます。 また、[自分自身のレポジトリを作成](https://getcomposer.org/doc/05-repositories.md#repository) して、それを使うように Composer を構成することも出来ます。
これは、あなたがプライベートなエクステンションを開発していて、それを自分のプロジェクト間でのみ共有したい場合に役に立つ方法です。 これは、あなたがプライベートなエクステンションを開発していて、それを自分のプロジェクト間でのみ共有したい場合に役に立つ方法です。
...@@ -201,7 +201,7 @@ Yii は [Composer アセットプラグイン](https://github.com/francoispluchi ...@@ -201,7 +201,7 @@ Yii は [Composer アセットプラグイン](https://github.com/francoispluchi
上記のコードは、エクステンションが `jquery` Bower パッケージに依存することを述べています。 上記のコードは、エクステンションが `jquery` Bower パッケージに依存することを述べています。
一般に、`composer.json` の中でBower パッケージを指すためには `bower-asset/PackageName` を使うことが出来ます。 一般に、`composer.json` の中でBower パッケージを指すためには `bower-asset/PackageName` を使うことが出来ます。
そして、NPM パッケージを指すためには `npm-asset/PackageName` を使うことが出来ます。 そして、NPM パッケージを指すためには `npm-asset/PackageName` を使うことが出来ます。
Composer が Bower または NPM のパッケージをインストールする場合は、既定では、それぞれ、`@vendor/bower/PackageName` および `@vendor/npm/Packages` というディレクトリの下にパッケージの内容がインストールされます。 Composer が Bower または NPM のパッケージをインストールする場合は、デフォルトでは、それぞれ、`@vendor/bower/PackageName` および `@vendor/npm/Packages` というディレクトリの下にパッケージの内容がインストールされます。
この二つのディレクトリは、`@bower/PackageName` および `@npm/PackageName` という短いエイリアスを使って参照することも可能です。 この二つのディレクトリは、`@bower/PackageName` および `@npm/PackageName` という短いエイリアスを使って参照することも可能です。
アセット管理に関する詳細については、[アセット](structure-assets.md#bower-npm-assets) の節を参照してください。 アセット管理に関する詳細については、[アセット](structure-assets.md#bower-npm-assets) の節を参照してください。
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
例えば、アクセスコントロールフィルタはアクションの前に走って、アクションが特定のエンドユーザだけにアクセスを許可するものであることを保証します。 例えば、アクセスコントロールフィルタはアクションの前に走って、アクションが特定のエンドユーザだけにアクセスを許可するものであることを保証します。
また、コンテント圧縮フィルタはアクションの後に走って、レスポンスのコンテントをエンドユーザに送出する前に圧縮します。 また、コンテント圧縮フィルタはアクションの後に走って、レスポンスのコンテントをエンドユーザに送出する前に圧縮します。
フィルタは、前フィルタ (アクションの *前* に適用されるフィルタのロジック) および/または 後フィルタ (アクションの *後* に適用されるフィルタ) から構成されます。 一つのフィルタは、前フィルタ (アクションの *前* に適用されるフィルタのロジック) および/または 後フィルタ (アクションの *後* に適用されるロジック) から構成することが出来ます。
## フィルタを使用する <span id="using-filters"></span> ## フィルタを使用する <span id="using-filters"></span>
...@@ -30,17 +30,15 @@ public function behaviors() ...@@ -30,17 +30,15 @@ public function behaviors()
} }
``` ```
既定では、コントローラクラスの中で宣言されたフィルタは、そのコントローラの *全て* のアクションに適用されます。 デフォルトでは、コントローラクラスの中で宣言されたフィルタは、そのコントローラの *全て* のアクションに適用されます。
しかし、[[yii\base\ActionFilter::only|only]] プロパティを構成することによって、フィルタがどのアクションに適用されるべきかを明示的に指定することも出来ます。 しかし、[[yii\base\ActionFilter::only|only]] プロパティを構成することによって、フィルタがどのアクションに適用されるべきかを明示的に指定することも出来ます。
上記の例では、 `HttpCache` フィルタは、`index``view` のアクションに対してのみ適用されています。 上記の例では、 `HttpCache` フィルタは、`index``view` のアクションに対してのみ適用されています。
また、[[yii\base\ActionFilter::except|except]] プロパティを構成して、いくつかのアクションをフィルタされないように除外することも可能です。 また、[[yii\base\ActionFilter::except|except]] プロパティを構成して、いくつかのアクションをフィルタされないように除外することも可能です。
コントローラのほかに、[モジュール](structure-modules.md) または [アプリケーション](structure-applications.md) でもフィルタを宣言することが出来ます。 コントローラのほかに、[モジュール](structure-modules.md) または [アプリケーション](structure-applications.md) でもフィルタを宣言することが出来ます。
そのようにした場合、[[yii\base\ActionFilter::only|only]] と [[yii\base\ActionFilter::except|except]] のプロパティを上で説明したように構成しない限り、 そのようにした場合、[[yii\base\ActionFilter::only|only]] と [[yii\base\ActionFilter::except|except]] のプロパティを上で説明したように構成しない限り、そのフィルタは、モジュールまたはアプリケーションに属する *全て* のコントローラアクションに適用されます。
そのフィルタは、モジュールまたはアプリケーションに属する *全て* のコントローラアクションに適用されます。
> Note|注意: モジュールやアプリケーションでフィルタを宣言する場合、[[yii\base\ActionFilter::only|only]] と [[yii\base\ActionFilter::except|except]] > Note|注意: モジュールやアプリケーションでフィルタを宣言する場合、[[yii\base\ActionFilter::only|only]] と [[yii\base\ActionFilter::except|except]] のプロパティでは、アクション ID ではなく、[ルート](structure-controllers.md#routes) を使わなければなりません。
のプロパティでは、アクション ID ではなく、[ルート](structure-controllers.md#routes) を使うべきです。
なぜなら、モジュールやアプリケーションのスコープでは、アクション ID だけでは完全にアクションを指定することが出来ないからです。 なぜなら、モジュールやアプリケーションのスコープでは、アクション ID だけでは完全にアクションを指定することが出来ないからです。
一つのアクションに複数のフィルタが構成されている場合、フィルタは下記で説明されている規則に従って適用されます。 一つのアクションに複数のフィルタが構成されている場合、フィルタは下記で説明されている規則に従って適用されます。
...@@ -59,8 +57,7 @@ public function behaviors() ...@@ -59,8 +57,7 @@ public function behaviors()
## フィルタを作成する <span id="creating-filters"></span> ## フィルタを作成する <span id="creating-filters"></span>
新しいアクションフィルタを作成するためには、[[yii\base\ActionFilter]] を拡張して、[[yii\base\ActionFilter::beforeAction()|beforeAction()]] 新しいアクションフィルタを作成するためには、[[yii\base\ActionFilter]] を拡張して、[[yii\base\ActionFilter::beforeAction()|beforeAction()]] および/または [[yii\base\ActionFilter::afterAction()|afterAction()]] メソッドをオーバーライドします。
および/または [[yii\base\ActionFilter::afterAction()|afterAction()]] メソッドをオーバーライドします。
前者はアクションが走る前に実行され、後者は走った後に実行されます。 前者はアクションが走る前に実行され、後者は走った後に実行されます。
[[yii\base\ActionFilter::beforeAction()|beforeAction()]] の返り値が、アクションが実行されるべきか否かを決定します。 [[yii\base\ActionFilter::beforeAction()|beforeAction()]] の返り値が、アクションが実行されるべきか否かを決定します。
返り値が false である場合、このフィルタの後に続くフィルタはスキップされ、アクションは実行を中止されます。 返り値が false である場合、このフィルタの後に続くフィルタはスキップされ、アクションは実行を中止されます。
...@@ -102,13 +99,11 @@ Yii 縺ッ繧医¥菴ソ繧上l繧倶ク騾」縺ョ繝輔ぅ繝ォ繧ソ繧呈署萓帙@縺ヲ縺翫j縲√◎繧後i ...@@ -102,13 +99,11 @@ Yii 縺ッ繧医¥菴ソ繧上l繧倶ク騾」縺ョ繝輔ぅ繝ォ繧ソ繧呈署萓帙@縺ヲ縺翫j縲√◎繧後i
### [[yii\filters\AccessControl|AccessControl]] <span id="access-control"></span> ### [[yii\filters\AccessControl|AccessControl]] <span id="access-control"></span>
AccessControl は、一組の [[yii\filters\AccessControl::rules|規則]] に基づいて、シンプルなアクセスコントロールを提供するものです。 AccessControl は、一組の [[yii\filters\AccessControl::rules|規則]] に基づいて、シンプルなアクセスコントロールを提供するものです。
具体的に言うと、アクションが実行される前に、AccessControl はリストされた規則を調べて、現在のコンテキスト変数 具体的に言うと、アクションが実行される前に、AccessControl はリストされた規則を調べて、現在のコンテキスト変数 (例えば、ユーザの IP アドレスや、ユーザのログイン状態など) に最初に合致するものを見つけます。
(例えば、ユーザの IP アドレスや、ユーザのログイン状態など) に最初に合致するものを見つけます。
そして、合致した規則によって、リクエストされたアクションの実行を許可するか拒否するかを決定します。 そして、合致した規則によって、リクエストされたアクションの実行を許可するか拒否するかを決定します。
合致する規則がなかった場合は、アクセスは拒否されます。 合致する規則がなかった場合は、アクセスは拒否されます。
次の例は、認証されたユーザに対しては `create``update` のアクションへのアクセスを許可し、 次の例は、認証されたユーザに対しては `create``update` のアクションへのアクセスを許可し、その他のすべてのユーザにはこれら二つのアクションに対するアクセスを拒否する仕方を示すものです。
その他のすべてのユーザにはこれら二つのアクションに対するアクセスを拒否する仕方を示すものです。
```php ```php
use yii\filters\AccessControl; use yii\filters\AccessControl;
...@@ -125,7 +120,7 @@ public function behaviors() ...@@ -125,7 +120,7 @@ public function behaviors()
'allow' => true, 'allow' => true,
'roles' => ['@'], 'roles' => ['@'],
], ],
// その他は、既定により拒否される // その他はすべてデフォルトにより拒否される
], ],
], ],
]; ];
...@@ -143,8 +138,7 @@ public function behaviors() ...@@ -143,8 +138,7 @@ public function behaviors()
次の例は、[[yii\filters\auth\HttpBasicAuth]] の使い方を示すもので、HTTP Basic 認証に基づくアクセストークンを使ってユーザを認証しています。 次の例は、[[yii\filters\auth\HttpBasicAuth]] の使い方を示すもので、HTTP Basic 認証に基づくアクセストークンを使ってユーザを認証しています。
これを動作させるためには、あなたの [[yii\web\User::identityClass|ユーザアイデンティティクラス]] これを動作させるためには、あなたの [[yii\web\User::identityClass|ユーザアイデンティティクラス]]
[[yii\web\IdentityInterface::findIdentityByAccessToken()|findIdentityByAccessToken()]] [[yii\web\IdentityInterface::findIdentityByAccessToken()|findIdentityByAccessToken()]] メソッドを実装していなければならないことに注意してください。
メソッドを実装していなければならないことに注意してください。
```php ```php
use yii\filters\auth\HttpBasicAuth; use yii\filters\auth\HttpBasicAuth;
...@@ -192,8 +186,7 @@ public function behaviors() ...@@ -192,8 +186,7 @@ public function behaviors()
} }
``` ```
レスポンス形式と言語は [アプリケーションのライフサイクル](structure-applications.md#application-lifecycle) レスポンス形式と言語は [アプリケーションのライフサイクル](structure-applications.md#application-lifecycle) のもっと早い段階で決定される必要があることがよくあります。
のもっと早い段階で決定される必要があることがよくあります。
このため、ContentNegotiator はフィルタの他に、[ブートストラップコンポーネント](structure-applications.md#bootstrap) としても使うことができるように設計されています。 このため、ContentNegotiator はフィルタの他に、[ブートストラップコンポーネント](structure-applications.md#bootstrap) としても使うことができるように設計されています。
例えば、次のように、ContentNegotiator を [アプリケーションの構成情報](structure-applications.md#application-configurations) の中で構成することが出来ます。 例えば、次のように、ContentNegotiator を [アプリケーションの構成情報](structure-applications.md#application-configurations) の中で構成することが出来ます。
...@@ -218,14 +211,13 @@ use yii\web\Response; ...@@ -218,14 +211,13 @@ use yii\web\Response;
]; ];
``` ```
> Info|情報: 望ましいコンテントタイプと言語がリクエストからは決定できない場合は、[[formats]] および [[languages]] > Info|情報: 望ましいコンテントタイプと言語がリクエストから決定できない場合は、[[formats]] および [[languages]] に挙げられている最初の形式と言語が使用されます。
に挙げられている最初の形式と言語が使用されます。
### [[yii\filters\HttpCache|HttpCache]] <span id="http-cache"></span> ### [[yii\filters\HttpCache|HttpCache]] <span id="http-cache"></span>
HttpCache は `Last-Modified` および `Etag` の HTTP ヘッダを利用して、クライアントサイドのキャッシュを実装するものです。 HttpCache は `Last-Modified` および `Etag` の HTTP ヘッダを利用して、クライアント側のキャッシュを実装するものです
```php ```php
use yii\filters\HttpCache; use yii\filters\HttpCache;
...@@ -250,7 +242,7 @@ HttpCache 縺ォ髢「縺吶k隧ウ邏ー縺ッ [HTTP 繧ュ繝」繝す繝・](caching-http.md) 縺ョ遽繧 ...@@ -250,7 +242,7 @@ HttpCache 縺ォ髢「縺吶k隧ウ邏ー縺ッ [HTTP 繧ュ繝」繝す繝・](caching-http.md) 縺ョ遽繧
### [[yii\filters\PageCache|PageCache]] <span id="page-cache"></span> ### [[yii\filters\PageCache|PageCache]] <span id="page-cache"></span>
PageCache はサーバサイドにおけるページ全体のキャッシュを実装するものです。 PageCache はサーバ側におけるページ全体のキャッシュを実装するものです。
次の例では、PageCache が `index` アクションに適用されて、最大 60 秒間、または、`post` テーブルのエントリ数が変化するまでの間、ページ全体をキャッシュしています。 次の例では、PageCache が `index` アクションに適用されて、最大 60 秒間、または、`post` テーブルのエントリ数が変化するまでの間、ページ全体をキャッシュしています。
さらに、このページキャッシュは、選択されたアプリケーションの言語に従って、違うバージョンのページを保存するようにしています。 さらに、このページキャッシュは、選択されたアプリケーションの言語に従って、違うバージョンのページを保存するようにしています。
...@@ -282,8 +274,8 @@ PageCache 縺ョ菴ソ逕ィ縺ォ髢「縺吶k隧ウ邏ー縺ッ [繝壹繧ク繧ュ繝」繝す繝・](caching-page ...@@ -282,8 +274,8 @@ PageCache 縺ョ菴ソ逕ィ縺ォ髢「縺吶k隧ウ邏ー縺ッ [繝壹繧ク繧ュ繝」繝す繝・](caching-page
### [[yii\filters\RateLimiter|RateLimiter]] <span id="rate-limiter"></span> ### [[yii\filters\RateLimiter|RateLimiter]] <span id="rate-limiter"></span>
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) 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 を実装するときに使用されます。 として RESTful API を実装するときに使用されます。
このフィルタの使用に関する詳細は [レート制限](rest-rate-limiting.md) の節を参照してください。 このフィルタの使用に関する詳細は [レート制限](rest-rate-limiting.md) の節を参照してください。
...@@ -291,7 +283,7 @@ RateLimiter 縺ッ [繝ェ繝シ繧ュ繝シ繝舌こ繝ヨ繧「繝ォ繧エ繝ェ繧コ繝](http://ja.wikipedia ...@@ -291,7 +283,7 @@ RateLimiter 縺ッ [繝ェ繝シ繧ュ繝シ繝舌こ繝ヨ繧「繝ォ繧エ繝ェ繧コ繝](http://ja.wikipedia
VerbFilter は、HTTP リクエストメソッド (HTTP 動詞) がリクエストされたアクションによって許可されているかどうかをチェックするものです。 VerbFilter は、HTTP リクエストメソッド (HTTP 動詞) がリクエストされたアクションによって許可されているかどうかをチェックするものです。
許可されていない場合は、HTTP 405 例外を投げます。 許可されていない場合は、HTTP 405 例外を投げます。
次の例では、VerbFilter が宣言されて、CRUD アクションに対して許可されるメソッドの典型的なセットを規定しています。 次の例では、VerbFilter が宣言されて、CRUD アクションに対して許可されるメソッドの典型的なセットを指定しています。
```php ```php
use yii\filters\VerbFilter; use yii\filters\VerbFilter;
...@@ -315,8 +307,7 @@ public function behaviors() ...@@ -315,8 +307,7 @@ public function behaviors()
### [[yii\filters\Cors|Cors]] <span id="cors"></span> ### [[yii\filters\Cors|Cors]] <span id="cors"></span>
クロスオリジンリソース共有 [CORS](https://developer.mozilla.org/ja/docs/HTTP_access_control) とは、ウェブページにおいて、さまざまなリソース クロスオリジンリソース共有 [CORS](https://developer.mozilla.org/ja/docs/HTTP_access_control) とは、ウェブページにおいて、さまざまなリソース (例えば、フォントや JavaScript など) を、それを生成するドメイン以外のドメインからリクエストすることを可能にするメカニズムです。
(例えば、フォントや JavaScript など) を、それを生成するドメイン以外のドメインからリクエストすることを可能にするメカニズムです。
特に言えば、JavaScript の AJAX 呼出しが使用することが出来る XMLHttpRequest メカニズムです。 特に言えば、JavaScript の AJAX 呼出しが使用することが出来る XMLHttpRequest メカニズムです。
このような「クロスドメイン」のリクエストは、このメカニズムに拠らなければ、同一生成元のセキュリティポリシーによって、ウェブブラウザから禁止されるはずのものです。 このような「クロスドメイン」のリクエストは、このメカニズムに拠らなければ、同一生成元のセキュリティポリシーによって、ウェブブラウザから禁止されるはずのものです。
CORS は、ブラウザとサーバが交信して、クロスドメインのリクエストを許可するか否かを決定する方法を定義するものです。 CORS は、ブラウザとサーバが交信して、クロスドメインのリクエストを許可するか否かを決定する方法を定義するものです。
......
...@@ -4,14 +4,13 @@ ...@@ -4,14 +4,13 @@
モジュールは、[モデル](structure-models.md)[ビュー](structure-views.md)[コントローラ](structure-controllers.md)、およびその他の支援コンポーネントから構成される自己充足的なソフトウェアのユニットです。 モジュールは、[モデル](structure-models.md)[ビュー](structure-views.md)[コントローラ](structure-controllers.md)、およびその他の支援コンポーネントから構成される自己充足的なソフトウェアのユニットです。
モジュールが [アプリケーション](structure-applications.md) にインストールされている場合、エンドユーザはモジュールのコントローラにアクセスする事が出来ます。 モジュールが [アプリケーション](structure-applications.md) にインストールされている場合、エンドユーザはモジュールのコントローラにアクセスする事が出来ます。
これらのことを理由として、モジュールは小さなアプリケーションと見なされることがよくあります。 これらのことを理由として、モジュールは小さなアプリケーションと見なされることがよくあります。
しかし、モジュールは単独では配できず、アプリケーションの中に存在しなければならないという点で [アプリケーション](structure-applications.md) とは異なります。 しかし、モジュールは単独では配できず、アプリケーションの中に存在しなければならないという点で [アプリケーション](structure-applications.md) とは異なります。
## モジュールを作成する <span id="creating-modules"></span> ## モジュールを作成する <span id="creating-modules"></span>
モジュールは、モジュールの [[yii\base\Module::basePath|ベースパス]] と呼ばれるディレクトリとして組織されます。 モジュールは、モジュールの [[yii\base\Module::basePath|ベースパス]] と呼ばれるディレクトリとして編成されます。
このディレクトリの中に、ちょうどアプリケーションの場合と同じように、`controllers``models``views` このディレクトリの中に、ちょうどアプリケーションの場合と同じように、`controllers``models``views` のようなサブディレクトリが存在して、コントローラ、モデル、ビュー、その他のコードを収納しています。
のようなサブディレクトリが存在して、コントローラ、モデル、ビュー、その他のコードを収納しています。
次の例は、モジュール内の中身を示すものです。 次の例は、モジュール内の中身を示すものです。
``` ```
...@@ -34,7 +33,7 @@ forum/ ...@@ -34,7 +33,7 @@ forum/
モジュールがアクセスされたとき、対応するモジュールクラスの単一のインスタンスが作成されます。 モジュールがアクセスされたとき、対応するモジュールクラスの単一のインスタンスが作成されます。
[アプリケーションのインスタンス](structure-applications.md) と同じように、モジュールのインスタンスは、モジュール内のコードがデータとコンポーネントを共有するために使用されます。 [アプリケーションのインスタンス](structure-applications.md) と同じように、モジュールのインスタンスは、モジュール内のコードがデータとコンポーネントを共有するために使用されます。
次のコードは、モジュールクラスがどのように見えるかを示す例です。 次のコードは、モジュールクラスがどのようなものかを示す例です。
```php ```php
namespace app\modules\forum; namespace app\modules\forum;
...@@ -51,8 +50,7 @@ class Module extends \yii\base\Module ...@@ -51,8 +50,7 @@ class Module extends \yii\base\Module
} }
``` ```
`init` メソッドがモジュールのプロパティを初期化するためのコードをたくさん含む場合は、 `init` メソッドがモジュールのプロパティを初期化するためのコードをたくさん含む場合は、それを [構成情報](concept-configurations.md) の形で保存し、`init()` の中で次のコードを使って読み出すことも可能です。
それを [構成情報](concept-configurations.md) の形で保存し、`init()` の中で次のコードを使って読み出すことも可能です。
```php ```php
public function init() public function init()
...@@ -108,7 +106,7 @@ class PostController extends Controller ...@@ -108,7 +106,7 @@ class PostController extends Controller
例えば、コントローラクラスが `PostController` である場合、ディレクトリはモジュールの [[yii\base\Module::basePath|ベースパス]] の中の `views/post` となります。 例えば、コントローラクラスが `PostController` である場合、ディレクトリはモジュールの [[yii\base\Module::basePath|ベースパス]] の中の `views/post` となります。
モジュールは、そのモジュールのコントローラによってレンダリングされるビューに適用される [レイアウト](structure-views.md#layouts) を指定することが出来ます。 モジュールは、そのモジュールのコントローラによってレンダリングされるビューに適用される [レイアウト](structure-views.md#layouts) を指定することが出来ます。
レイアウトは、既定では `views/layouts` ディレクトリに置かれなければならず、また、[[yii\base\Module::layout]] プロパティがレイアウトの名前を指すように構成しなければなりません。 レイアウトは、デフォルトでは `views/layouts` ディレクトリに置かれなければならず、また、[[yii\base\Module::layout]] プロパティがレイアウトの名前を指すように構成しなければなりません。
`layout` プロパティを構成しない場合は、アプリケーションのレイアウトが代りに使用されます。 `layout` プロパティを構成しない場合は、アプリケーションのレイアウトが代りに使用されます。
...@@ -138,7 +136,7 @@ class PostController extends Controller ...@@ -138,7 +136,7 @@ class PostController extends Controller
アプリケーションの中のコントローラをアクセスするのと同じように、[ルート](structure-controllers.md#routes) がモジュールの中のコントローラを指し示すために使われます。 アプリケーションの中のコントローラをアクセスするのと同じように、[ルート](structure-controllers.md#routes) がモジュールの中のコントローラを指し示すために使われます。
モジュール内のコントローラのルートは、モジュール ID で始まり、コントローラ ID、アクション ID と続くものでなければなりません。 モジュール内のコントローラのルートは、モジュール ID で始まり、コントローラ ID、アクション ID と続くものでなければなりません。
例えば、アプリケーションが `forum` という名前のモジュールを使用している場合、`forum/post/index` というルートは、`forum` モジュール内の `post` コントローラの `index` アクションを表します。 例えば、アプリケーションが `forum` という名前のモジュールを使用している場合、`forum/post/index` というルートは、`forum` モジュール内の `post` コントローラの `index` アクションを表します。
ルートがモジュール ID だけを含む場合は、[[yii\base\Module::defaultRoute]] プロパティ (既定値は `default` です) が、どのコントローラ/アクションが使用されるべきかを決定します。 ルートがモジュール ID だけを含む場合は、[[yii\base\Module::defaultRoute]] プロパティ (デフォルト値は `default` です) が、どのコントローラ/アクションが使用されるべきかを決定します。
これは、`forum` というルートは `forum` モジュール内の `default` コントローラを表すという意味です。 これは、`forum` というルートは `forum` モジュール内の `default` コントローラを表すという意味です。
...@@ -151,11 +149,11 @@ class PostController extends Controller ...@@ -151,11 +149,11 @@ class PostController extends Controller
$module = MyModuleClass::getInstance(); $module = MyModuleClass::getInstance();
``` ```
ここで `MyModuleClass` は、関心を持っているモジュールクラスの名前を指します。 ここで `MyModuleClass` は、当該モジュールクラスの名前を指すものです。
`getInstance()` メソッドは、現在リクエストされているモジュールクラスのインスタンスを返します。 `getInstance()` メソッドは、現在リクエストされているモジュールクラスのインスタンスを返します。
モジュールがリクエストされていない場合は、このメソッドは null を返します。 モジュールがリクエストされていない場合は、このメソッドは null を返します。
モジュールクラスの新しいインスタンスを手動で作成しようとしてはいけないことに注意してください。 モジュールクラスの新しいインスタンスを手動で作成しようとしてはいけないことに注意してください。
そのインスタンスは、リクエストに対するレスポンスとして Yii によって作成されたインスタンスとは別のものになります。 手動で作成したインスタンスは、リクエストに対するレスポンスとして Yii によって作成されたインスタンスとは別のものになります。
> Info|情報: モジュールを開発するとき、モジュールが固定の ID を使うと仮定してはいけません。 > Info|情報: モジュールを開発するとき、モジュールが固定の ID を使うと仮定してはいけません。
なぜなら、モジュールは、アプリケーションや他のモジュールの中で使うときに、任意の ID と結び付けることが出来るからです。 なぜなら、モジュールは、アプリケーションや他のモジュールの中で使うときに、任意の ID と結び付けることが出来るからです。
...@@ -220,7 +218,7 @@ class Module extends \yii\base\Module ...@@ -220,7 +218,7 @@ class Module extends \yii\base\Module
$this->modules = [ $this->modules = [
'admin' => [ 'admin' => [
// ここはもっと短い名前空間の使用を考慮すべきだ! // ここはもっと短い名前空間の使用を考慮すべきです
'class' => 'app\modules\forum\modules\admin\Module', 'class' => 'app\modules\forum\modules\admin\Module',
], ],
]; ];
......
概要 概要
==== ====
Yii のアプリケーションは [モデル・ビュー・コントローラ (MVC)](http://ja.wikipedia.org/wiki/Model_View_Controller) デザインパターンに従って組織されます。 Yii のアプリケーションは [モデル・ビュー・コントローラ (MVC)](http://ja.wikipedia.org/wiki/Model_View_Controller) デザインパターンに従って編成されています。
[モデル](structure-models.md) は、データ、ビジネスロジック、規則を表現します。 [モデル](structure-models.md) は、データ、ビジネスロジック、規則を表現します。
[ビュー](structure-views.md) は、モデルの出力表現です。 [ビュー](structure-views.md) は、モデルの出力表現です。
そして [コントローラ](structure-controllers.md) は入力を受け取って、それを [モデル](structure-models.md)[ビュー](structure-views.md) のためのコマンドに変換します。 そして [コントローラ](structure-controllers.md) は入力を受け取って、それを [モデル](structure-models.md)[ビュー](structure-views.md) のためのコマンドに変換します。
...@@ -13,7 +13,7 @@ MVC 以外にも、Yii のアプリケーションは下記の要素を持って ...@@ -13,7 +13,7 @@ MVC 以外にも、Yii のアプリケーションは下記の要素を持って
* [アプリケーション](structure-applications.md): グローバルにアクセス可能なオブジェクトであり、アプリケーションコンポーネントを管理し、連携させて、リクエストに応えます。 * [アプリケーション](structure-applications.md): グローバルにアクセス可能なオブジェクトであり、アプリケーションコンポーネントを管理し、連携させて、リクエストに応えます。
* [アプリケーションコンポーネント](structure-application-components.md): アプリケーションと共に登録されたオブジェクトであり、リクエストに応えるための様々なサービスを提供します。 * [アプリケーションコンポーネント](structure-application-components.md): アプリケーションと共に登録されたオブジェクトであり、リクエストに応えるための様々なサービスを提供します。
* [モジュール](structure-modules.md): それ自身に完全な MVC を含む自己完結的なパッケージです。 * [モジュール](structure-modules.md): それ自身に完全な MVC を含む自己完結的なパッケージです。
アプリケーションは複数のモジュールとして組織することが出来ます。 アプリケーションは複数のモジュールとして編成することが出来ます。
* [フィルタ](structure-filters.md): 各リクエストが実際に処理される前と後に、コントローラから呼び出される必要があるコードを表現します。 * [フィルタ](structure-filters.md): 各リクエストが実際に処理される前と後に、コントローラから呼び出される必要があるコードを表現します。
* [ウィジェット](structure-widgets.md): [ビュー](structure-views.md) に埋め込むことが出来るオブジェクトです。コントローラのロジックを含むことが可能で、異なるビューで再利用することが出来ます。 * [ウィジェット](structure-widgets.md): [ビュー](structure-views.md) に埋め込むことが出来るオブジェクトです。コントローラのロジックを含むことが可能で、異なるビューで再利用することが出来ます。
......
...@@ -80,9 +80,9 @@ use yii\helpers\HtmlPurifier; ...@@ -80,9 +80,9 @@ use yii\helpers\HtmlPurifier;
アプリケーションが高いパフォーマンスを要求する場合は、フィルター結果を [キャッシュ](caching-overview.md) することを考慮すべきです。 アプリケーションが高いパフォーマンスを要求する場合は、フィルター結果を [キャッシュ](caching-overview.md) することを考慮すべきです。
### ビューを整理する <span id="organizing-views"></span> ### ビューを編成する <span id="organizing-views"></span>
[コントローラ](structure-controllers.md)[モデル](structure-models.md) と同じように、ビューを整理するための規約があります。. [コントローラ](structure-controllers.md)[モデル](structure-models.md) と同じように、ビューを編成するための規約があります。.
* コントローラによって表示されるビューは、デフォルトでは、ディレクトリ `@app/views/ControllerID` の下に置かれるべきものです。 * コントローラによって表示されるビューは、デフォルトでは、ディレクトリ `@app/views/ControllerID` の下に置かれるべきものです。
ここで、`ControllerID`[コントローラ ID](structure-controllers.md#routes) を指します。 ここで、`ControllerID`[コントローラ ID](structure-controllers.md#routes) を指します。
...@@ -456,14 +456,14 @@ class PostController extends Controller ...@@ -456,14 +456,14 @@ class PostController extends Controller
<?php $this->endBlock(); ?> <?php $this->endBlock(); ?>
``` ```
次に、レイアウトビューで、得ることが出来ればブロックをレンダリングし、ブロックが定義されていないときは何らかの既定のコンテントを表示します。 次に、レイアウトビューで、得ることが出来ればブロックをレンダリングし、ブロックが定義されていないときは何らかのデフォルトのコンテントを表示します。
```php ```php
... ...
<?php if (isset($this->blocks['block1'])): ?> <?php if (isset($this->blocks['block1'])): ?>
<?= $this->blocks['block1'] ?> <?= $this->blocks['block1'] ?>
<?php else: ?> <?php else: ?>
... block1 の既定のコンテント ... ... block1 のデフォルトのコンテント ...
<?php endif; ?> <?php endif; ?>
... ...
...@@ -471,7 +471,7 @@ class PostController extends Controller ...@@ -471,7 +471,7 @@ class PostController extends Controller
<?php if (isset($this->blocks['block2'])): ?> <?php if (isset($this->blocks['block2'])): ?>
<?= $this->blocks['block2'] ?> <?= $this->blocks['block2'] ?>
<?php else: ?> <?php else: ?>
... block2 の既定のコンテント ... ... block2 のデフォルトのコンテント ...
<?php endif; ?> <?php endif; ?>
... ...
...@@ -479,7 +479,7 @@ class PostController extends Controller ...@@ -479,7 +479,7 @@ class PostController extends Controller
<?php if (isset($this->blocks['block3'])): ?> <?php if (isset($this->blocks['block3'])): ?>
<?= $this->blocks['block3'] ?> <?= $this->blocks['block3'] ?>
<?php else: ?> <?php else: ?>
... block3 の既定のコンテント ... ... block3 のデフォルトのコンテント ...
<?php endif; ?> <?php endif; ?>
... ...
``` ```
......
ウィジェット ウィジェット
============ ============
ウィジェットは、[ビュー](structure-views.md) で使用される再利用可能な構成ブロックで、 ウィジェットは、[ビュー](structure-views.md) で使用される再利用可能な構成ブロックで、複雑かつ構成可能なユーザインタフェイス要素をオブジェクト指向のやり方で作成するためのものです。
複雑かつ構成可能なユーザインタフェイス要素をオブジェクト指向のやり方で作成するためのものです。
例えば、日付選択ウィジェットを使うと、入力として日付を選択することを可能にする素敵なデイトピッカーを生成することが出来ます。 例えば、日付選択ウィジェットを使うと、入力として日付を選択することを可能にする素敵なデイトピッカーを生成することが出来ます。
このとき、あなたがしなければならないことは、次のようなコードをビューに挿入することだけです: このとき、あなたがしなければならないことは、次のようなコードをビューに挿入することだけです:
...@@ -41,7 +40,7 @@ use yii\jui\DatePicker; ...@@ -41,7 +40,7 @@ use yii\jui\DatePicker;
``` ```
ウィジェットの中には、コンテントのブロックを受け取ることが出来るものもあります。 ウィジェットの中には、コンテントのブロックを受け取ることが出来るものもあります。
その場合、コンテントのブロックは [[yii\base\Widget::begin()]] と [[yii\base\Widget::end()]] の呼び出しの間に包むようにしなければなりません。 その場合、コンテントのブロックは [[yii\base\Widget::begin()]] と [[yii\base\Widget::end()]] の呼び出しで囲むようにしなければなりません。
例えば、次のコードは [[yii\widgets\ActiveForm]] ウィジェットを使ってログインフォームを生成するものです。 例えば、次のコードは [[yii\widgets\ActiveForm]] ウィジェットを使ってログインフォームを生成するものです。
このウィジェットは、`begin()``end()` が呼ばれる場所で、それぞれ、開始と終了の `<form>` タグを生成します。 このウィジェットは、`begin()``end()` が呼ばれる場所で、それぞれ、開始と終了の `<form>` タグを生成します。
その間に置かれたものは全てそのままレンダリングされます。 その間に置かれたものは全てそのままレンダリングされます。
...@@ -155,8 +154,7 @@ use app\components\HelloWidget; ...@@ -155,8 +154,7 @@ use app\components\HelloWidget;
``` ```
場合によっては、ウィジェットが大きな固まりのコンテントを表示する必要があるかもしれません。 場合によっては、ウィジェットが大きな固まりのコンテントを表示する必要があるかもしれません。
コンテントを `run()` メソッドの中に埋め込むことも出来ますが、より良い方法は、コンテントを [ビュー](structure-views.md) コンテントを `run()` メソッドの中に埋め込むことも出来ますが、より良い方法は、コンテントを [ビュー](structure-views.md) の中に置いて、[[yii\base\Widget::render()]] を呼んでレンダリングすることです。
の中に置いて、[[yii\base\Widget::render()]] を呼んでレンダリングすることです。
例えば、 例えば、
```php ```php
...@@ -166,7 +164,7 @@ public function run() ...@@ -166,7 +164,7 @@ public function run()
} }
``` ```
既定では、ウィジェット用のビューは `WidgetPath/views` ディレクトリの中のファイルに保存すべきものです。 デフォルトでは、ウィジェット用のビューは `WidgetPath/views` ディレクトリの中のファイルに保存すべきものです。
ここで `WidgetPath` はウィジェットのクラスファイルを含むディレクトリを指します。 ここで `WidgetPath` はウィジェットのクラスファイルを含むディレクトリを指します。
したがって、上記の例では、ウィジェットクラスが `@app/components` に配置されていると仮定すると、`@app/components/views/hello.php` というビューファイルがレンダリングされることになります。 したがって、上記の例では、ウィジェットクラスが `@app/components` に配置されていると仮定すると、`@app/components/views/hello.php` というビューファイルがレンダリングされることになります。
[[yii\base\Widget::getViewPath()]] メソッドをオーバーライドして、ウィジェットのビューファイルを含むディレクトリをカスタマイズすることが出来ます。 [[yii\base\Widget::getViewPath()]] メソッドをオーバーライドして、ウィジェットのビューファイルを含むディレクトリをカスタマイズすることが出来ます。
...@@ -185,5 +183,4 @@ public function run() ...@@ -185,5 +183,4 @@ public function run()
幸いなことに、Yii はこの問題を解決するのに利用することが出来る [アセットバンドル](structure-assets.md) のサポートを提供しています。 幸いなことに、Yii はこの問題を解決するのに利用することが出来る [アセットバンドル](structure-assets.md) のサポートを提供しています。
ウィジェットがビューコードだけを含む場合は、[ビュー](structure-views.md) と非常に似たものになります。 ウィジェットがビューコードだけを含む場合は、[ビュー](structure-views.md) と非常に似たものになります。
実際のところ、この場合、両者の唯一の違いは、ウィジェットが再配布可能なクラスである一方で、 実際のところ、この場合、両者の唯一の違いは、ウィジェットが再配布可能なクラスである一方で、ビューはアプリケーション内に保持することが望ましい素の PHP スクリプトである、というぐらいの事です。
ビューはアプリケーション内に保持することが望ましい素の PHP スクリプトである、というぐらいの事です。
...@@ -181,13 +181,13 @@ foreach ($this->profiles as $row) ... ...@@ -181,13 +181,13 @@ foreach ($this->profiles as $row) ...
その必要がなければ、単にそれぞれの個別テストケースとそれに対応するフィクスチャの開発に専念することが出来ます。 その必要がなければ、単にそれぞれの個別テストケースとそれに対応するフィクスチャの開発に専念することが出来ます。
フィクスチャクラスとデータファイルを組織化する フィクスチャクラスとデータファイルを編成する
---------------------------------------------- --------------------------------------------
デフォルトでは、フィクスチャクラスは対応するデータファイルを探すときに、フィクスチャのクラスファイルを含むフォルダのサブフォルダである `data` フォルダの中を見ます。 デフォルトでは、フィクスチャクラスは対応するデータファイルを探すときに、フィクスチャのクラスファイルを含むフォルダのサブフォルダである `data` フォルダの中を見ます。
簡単なプロジェクトではこの規約に従うことができます。 簡単なプロジェクトではこの規約に従うことができます。
大きなプロジェクトでは、おそらくは、同じフィクスチャクラスを異なるテストに使うために、データファイルを切り替える必要がある場合がよく生じます。 大きなプロジェクトでは、おそらくは、同じフィクスチャクラスを異なるテストに使うために、データファイルを切り替える必要がある場合がよく生じます。
従って、クラスの名前空間と同じように、データファイルを階層的な方法で組織化することを推奨します。 従って、クラスの名前空間と同じように、データファイルを階層的な方法で編成することを推奨します。
例えば、 例えば、
``` ```
...@@ -215,7 +215,7 @@ data\ ...@@ -215,7 +215,7 @@ data\
> 例えば、DB フィクスチャを [[yii\test\ActiveFixture]] から拡張している場合は、DB テーブルの名前をフィクスチャのデータファイル名として使うべきです。 > 例えば、DB フィクスチャを [[yii\test\ActiveFixture]] から拡張している場合は、DB テーブルの名前をフィクスチャのデータファイル名として使うべきです。
> MongoDB フィクスチャを [[yii\mongodb\ActiveFixture]] から拡張している場合は、コレクション名をファイル名として使うべきです。 > MongoDB フィクスチャを [[yii\mongodb\ActiveFixture]] から拡張している場合は、コレクション名をファイル名として使うべきです。
同様な階層は、フィクスチャクラスファイルを組織化するのにも使うことが出来ます。 同様な階層は、フィクスチャクラスファイルを編成するのにも使うことが出来ます。
`data` をルートディレクトリとして使うのでなく、データファイルとの衝突を避けるために `fixtures` をルートディレクトリとして使うのが良いでしょう。 `data` をルートディレクトリとして使うのでなく、データファイルとの衝突を避けるために `fixtures` をルートディレクトリとして使うのが良いでしょう。
......
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