Browse Source

Merge pull request #7219 from softark/docs-guide-ja-concept-rev

Docs guide ja concept revised [ci skip]
tags/2.0.3
Alexander Makarov 10 years ago
parent
commit
1c0efbaf7b
  1. 2
      docs/guide-ja/concept-autoloading.md
  2. 4
      docs/guide-ja/concept-behaviors.md
  3. 6
      docs/guide-ja/concept-components.md
  4. 8
      docs/guide-ja/concept-configurations.md
  5. 89
      docs/guide-ja/concept-di-container.md
  6. 4
      docs/guide-ja/concept-events.md
  7. 5
      docs/guide-ja/concept-properties.md
  8. 2
      docs/guide-ja/concept-service-locator.md

2
docs/guide-ja/concept-autoloading.md

@ -1,7 +1,7 @@
クラスのオートローディング
=================
Yiiは、必要となるすべてのクラスファイルを、特定してインクルードするにあたり、 [クラスのオートローディングメカニズム](http://www.php.net/manual/en/language.oop5.autoload.php)
Yiiは、必要となるすべてのクラスファイルを、特定してインクルードするにあたり、 [クラスのオートローディングメカニズム](http://www.php.net/manual/ja/language.oop5.autoload.php)
を頼りにします。[PSR-4 標準](https://github.com/php-fig/fig-standards/blob/master/proposed/psr-4-autoloader/psr-4-autoloader.md) に準拠した、高性能なクラスのオートローダーを提供します。
このオートローダーは、あなたが `Yii.php` ファイルをインクルードするときにインストールされます。

4
docs/guide-ja/concept-behaviors.md

@ -100,7 +100,7 @@ function ($event) {
ビヘイビアのアタッチ <span id="attaching-behaviors"></span>
-------------------
[[yii\base\Component|component]] へのビヘイビアのアタッチは、静的にも動的にも可能です。実際は、前者のほうがより一般的ですが。
[[yii\base\Component|コンポーネント]] へのビヘイビアのアタッチは、静的にも動的にも可能です。実際は、前者のほうがより一般的ですが。
ビヘイビアを静的にアタッチするには、ビヘイビアをアタッチしたいコンポーネントクラスの [[yii\base\Component::behaviors()|behaviors()]] メソッドをオーバーライドします。
[[yii\base\Component::behaviors()|behaviors()]] メソッドは、ビヘイビアの [構成](concept-configurations.md) のリストを返さなければなりません。
@ -313,7 +313,7 @@ $user->touch('login_time');
ビヘイビアは通常のクラスのように、継承をサポートしています。いっぽうトレイトは、
言語サポートされたコピー&ペーストとみなすことができます。トレイトは継承をサポートしません。
ビヘイビアは、コンポーネントクラスの変更を必要とせずに、動的なコンポーネントへのアタッチとデタッチが可能です。トレイトを使用するには、クラスをトレイトを使って書き換える必要があります。
ビヘイビアは、コンポーネントクラスの変更を必要とせず、コンポーネントに動的にアタッチまたはデタッチすることが可能です。トレイトを使用するには、トレイトを使ってクラスのコードを書き換える必要があります。
ビヘイビアは構成可能ですがトレイトは不可能です。

6
docs/guide-ja/concept-components.md

@ -9,7 +9,7 @@
* [ビヘイビア](concept-behaviors.md)
個々にでも、組み合わせでも、これらの機能は Yii のクラスのカスタマイズ性と使いやすさをとても高めてくれます。たとえば、[[yii\jui\DatePicker|日付選択]] を行うユーザインターフェース·コンポーネントは、
対話型の日付選択UIを生成するとき、ビューで次のように使用することができます:
対話型の日付選択UIを生成するとき、[ビュー](structure-view.md) で次のように使用することができます:
```php
use yii\jui\DatePicker;
@ -39,6 +39,8 @@ echo DatePicker::widget([
例:
```php
<?php
namespace yii\components\MyClass;
use yii\base\Object;
@ -85,6 +87,6 @@ $component = \Yii::createObject([
3. [[yii\base\Object::init()|init()]] 内の事後初期化。サニティ・チェックやプロパティの正規化を行いたいときは、このメソッドをオーバーライドします。
4. オブジェクトのメソッド呼び出し。
最初の 3 つのステップは、すべてオブジェクトのコンストラクタ内で発生します。これは、あなたがクラスインスタンス (つまり、オブジェクト) を得たときには、
最初の 3 つのステップは、すべてオブジェクトのコンストラクタ内で発生します。これは、あなたがクラスインスタンス (つまり、オブジェクト) を得たときには、
すでにそのオブジェクトが適切な、信頼性の高い状態に初期化されていることを意味します。

8
docs/guide-ja/concept-configurations.md

@ -1,7 +1,8 @@
構成情報
==============
新しいオブジェクトを作成したり、既存のオブジェクトを初期化するとき、Yiiでは構成情報が広く使用されています。構成情報は通常、作成されるオブジェクトのクラス名、およびオブジェクトの [プロパティ](concept-properties.md)
新しいオブジェクトを作成したり、既存のオブジェクトを初期化するとき、Yiiでは構成情報が広く使用されています。
構成情報は通常、作成されるオブジェクトのクラス名、およびオブジェクトの [プロパティ](concept-properties.md)
に割り当てられる初期値のリストを含みます。構成情報は、オブジェクトの [イベント](concept-events.md) にアタッチされるハンドラのリストや、オブジェクトにアタッチされる
[ビヘイビア](concept-behaviors.md) のリストを含むこともできます。
@ -18,7 +19,8 @@ $config = [
$db = Yii::createObject($config);
```
[[Yiiの::CreateObject()]] メソッドは引数に構成情報の配列を受け取り、構成情報で名前指定されたクラスをインスタンス化してオブジェクトを作成します。オブジェクトがインスタンス化されるとき、その他の設定は、
[[Yiiの::CreateObject()]] メソッドは引数に構成情報の配列を受け取り、構成情報で名前指定されたクラスをインスタンス化してオブジェクトを作成します。
オブジェクトがインスタンス化されるとき、その他の設定は、
オブジェクトのプロパティ、イベントハンドラ、およびビヘイビアを初期化するのに使われます。
すでにオブジェクトがある場合は、構成情報配列でオブジェクトのプロパティを初期化するのに [[Yii::configure()]] を使用することができます:
@ -82,7 +84,7 @@ Yii::configure($object, $config);
### アプリケーションの構成 <span id="application-configurations"></span>
[アプリケーション](structure-applications.md) の構成は、おそらく Yii の中で最も複雑な配列のひとつです。
それは [[yii\web\Application|application]] クラスが、設定可能なプロパティとイベントを数多く持つためです。
それは [[yii\web\Application|アプリケーション]] クラスが、設定可能なプロパティとイベントを数多く持つためです。
さらに重要なことは、その [[yii\web\Application::components|components]] プロパティが、アプリケーションに登録されている
コンポーネント生成用の構成情報配列を受け取ることができることです。以下は、 [basic application template](start-basic.md)
のアプリケーション構成ファイルの概要です。

89
docs/guide-ja/concept-di-container.md

@ -1,15 +1,15 @@
依存注入コンテナ
==============================
依存注入コンテナ
================
依存注入 (DI) コンテナは、オブジェクトとそのすべての依存オブジェクトを、インスタンス化し、設定する方法を知っているオブジェクトです。
依存注入 (DI) コンテナは、オブジェクトとそれが依存するすべてのブジェクトを、インスタンス化し、設定する方法を知っているオブジェクトです。
なぜ DI コンテナが便利なのかは、[Martin の記事](http://martinfowler.com/articles/injection.html) の説明がわかりやすいでしょう。
ここでは、主に Yii の提供する DI コンテナの使用方法を説明します。
依存注入 <span id="dependency-injection"></span>
--------------------
依存注入 <span id="dependency-injection"></span>
--------
Yii は [[yii\di\Container]] クラスを通して DI コンテナの機能を提供します。これは、次の種類の依存注入をサポートしています:
Yii は [[yii\di\Container]] クラスを通して DI コンテナの機能を提供します。これは、次の種類の依存注入をサポートしています:
* コンストラクタ·インジェクション
* セッター/プロパティ·インジェクション
@ -19,8 +19,8 @@ Yii は [[yii\di\Container]] クラスを通して DI コンテナの機能を
### コンストラクタ·インジェクション <span id="constructor-injection"></span>
DI コンテナは、コンストラクタパラメータの型ヒントの助けを借りた、コンストラクタ·インジェクションをサポートしています。
型ヒントは、クラスやインタフェースが新しいオブジェクトの作成で使用されるさい、どれが依存であるのかということをコンテナに教えます。
コンテナは、依存クラスやインタフェースのインスタンスを取得し、コンストラクタを通して、新しいオブジェクトにそれらの注入を試みます。
型ヒントは、コンテナが新しいオブジェクトの作成に使用されるさい、オブジェクトがどういうクラスやインタフェースに依存しているかをコンテナに教えます。
コンテナは、依存クラスやインタフェースのインスタンスを取得することを試み、コンストラクタを通して、新しいオブジェクトにそれらの注入します。
たとえば
```php
@ -41,8 +41,8 @@ $foo = new Foo($bar);
### セッター/プロパティ·インジェクション <span id="setter-and-property-injection"></span>
セッター/プロパティ·インジェクションは、[構成情報](concept-configurations.md) を通してサポートされます。
依存関係を登録するときや、新しいオブジェクトを作成するとき、コンテナが使用する構成情報を提供することができ、
それに対応するセッターまたはプロパティを通じて依存関係が注入されます。たとえば
依存がそれに対応するセッターまたはプロパティを通して注入される場合、依存関係を登録するときや、新しいオブジェクトを作成するとき依存注入のためにコンテナが使用する構成情報を提供することが出来ます。
たとえば
```php
use yii\base\Object;
@ -73,8 +73,9 @@ $container->get('Foo', [], [
### PHP コーラブル・インジェクション <span id="php-callable-injection"></span>
この場合、コンテナは、登録された PHP のコーラブルオブジェクトを使用し、クラスの新しいインスタンスを構築します。
コーラブルは、依存関係を解決し、新しく作成されたオブジェクトに適切にそれらを注入する責任があります。たとえば
この場合、コンテナは、登録された PHP のコーラブルを使用して、クラスの新しいインスタンスを構築します。
コーラブルは、依存関係を解決し、新しく作成されたオブジェクトに適切に依存を注入する責務を負います。
たとえば
```php
$container->set('Foo', function () {
@ -86,26 +87,30 @@ $foo = $container->get('Foo');
依存関係の登録 <span id="registering-dependencies"></span>
------------------------
--------------
あなたは、[[yii\di\Container::set()]] 使って依存関係を登録することができます。登録には依存関係の名前だけでなく、
依存関係の定義が必要です。依存関係の名前は、クラス名、インタフェース名、エイリアス名を指定することができます。
依存関係の定義には、クラス名、構成情報配列、PHPのコーラブルを指定できます。
あなたは、[[yii\di\Container::set()]] を使って依存関係を登録することができます。
登録には依存の名前だけでなく、依存の定義が必要です。
依存の名前は、クラス名、インタフェース名、エイリアス名を指定することができます。
依存の定義には、クラス名、構成情報配列、PHPのコーラブルを指定できます。
```php
$container = new \yii\di\Container;
// クラス名そのまま。これはなくてもかまいません
// クラス名そのままの登録。これは省略可能です
$container->set('yii\db\Connection');
// インターフェースの登録
// クラスがインターフェースに依存する場合、対応するクラスが依存オブジェクトとしてインスタンス化されます
// クラスがインターフェースに依存する場合、対応するクラスが
// 依存オブジェクトとしてインスタンス化されます
$container->set('yii\mail\MailInterface', 'yii\swiftmailer\Mailer');
// エイリアス名の登録。$container->get('foo') を使って Connection のインスタンスを作成できます
// エイリアス名の登録。$container->get('foo') を使って
// Connection のインスタンスを作成できます
$container->set('foo', 'yii\db\Connection');
// 構成情報をともなうクラスの登録。クラスが get() でインスタンス化されるとき構成情報が適用されます
// 構成情報をともなうクラスの登録。クラスが get() でインスタンス化
// されるとき構成情報が適用されます
$container->set('yii\db\Connection', [
'dsn' => 'mysql:host=127.0.0.1;dbname=demo',
'username' => 'root',
@ -134,10 +139,10 @@ $container->set('db', function ($container, $params, $config) {
$container->set('pageCache', new FileCache);
```
> 補足: 依存関係名が、対応する依存関係の定義と同じである場合は、それを DI コンテナに登録する必要はありません。
> 補足: 依存の名前が対応する依存の定義と同じである場合は、それを DI コンテナに登録する必要はありません。
`set()` を介して登録された依存は、依存が必要とされるたびにインスタンスを生成します。
[[yii\di\Container::setSingleton()]] を使うと、単一のインスタンスをひとつだけ生成する依存関係を登録することができます:
`set()` を介して登録された依存は、依存が必要とされるたびにインスタンスを生成します。
[[yii\di\Container::setSingleton()]] を使うと、単一のインスタンスしか生成しない依存を登録することができます:
```php
$container->setSingleton('yii\db\Connection', [
@ -150,16 +155,16 @@ $container->setSingleton('yii\db\Connection', [
依存関係の解決 <span id="resolving-dependencies"></span>
----------------------
--------------
依存関係を登録すると、新しいオブジェクトを作成するのに DI コンテナを使用することができ
コンテナが自動的に、依存性をインスタンス化して新しく作成されたオブジェクトに注入することで
依存関係を解決します。依存関係の解決は再帰的、つまり、ある依存性が他の依存関係を持っている場合、
依存関係を登録すると、新しいオブジェクトを作成するのに DI コンテナを使用することができます。
そして、コンテナが自動的に依存をインスタンス化し、新しく作成されたオブジェクトに注入して
依存関係を解決します。依存関係の解決は再帰的に行われます。つまり、ある依存が他の依存関係を持っている場合、
それらの依存関係も自動的に解決されます。
[[yii\di\Container::get()]] を使って、新しいオブジェクトを作成することができます。
このメソッドは、クラス名、インタフェース名、エイリアス名で指定できる依存関係の名前を受け取ります。
依存関係名は、 `set()``setSingleton()` を介して登録されていたりされていなかったりする
このメソッドは、クラス名、インタフェース名、エイリアス名で指定できる依存の名前を受け取ります。
依存の名前は、 `set()``setSingleton()` を介して登録されていたりされていなかったりする
可能性があります。オプションで、クラスのコンストラクタのパラメータのリストや、新しく作成された
オブジェクトを設定するための [設定情報](concept-configurations.md) を渡すことができます。
たとえば
@ -173,12 +178,12 @@ $engine = $container->get('app\components\SearchEngine', [$apiKey], ['type' => 1
```
見えないところで、DIコンテナは、単に新しいオブジェクトを作成するよりもはるかに多くの作業を行います。
コンテナは、最初の依存クラスまたはインタフェースの名前を見つけるために、クラスのコンストラクタを検査し
自動的にそれらの依存関係を再帰解決します。
コンテナは、最初にクラスコンストラクタを調査し、依存クラスまたはインタフェースの名前を見つける
自動的にそれらの依存関係を再帰的に解決します。
次のコードでより洗練された例を示します。 `UserLister` クラスは `UserFinderInterface`
インタフェースを実装するオブジェクトに依存します。 `UserFinder` クラスはこのインターフェイスを実装していて、かつ、
`Connection` オブジェクトに依存します。これらのすべての依存関係は、クラスのコンストラクタのパラメータのタイプヒンティングで宣言されています。
`Connection` オブジェクトに依存します。これらのすべての依存関係は、クラスのコンストラクタのパラメータの型ヒントによって宣言されています。
プロパティ依存性の登録をすれば、DI コンテナは自動的にこれらの依存関係を解決し、単純に `get('userLister')`
を呼び出すだけで新しい `UserLister` インスタンスを作成できます。
@ -240,13 +245,13 @@ $lister = new UserLister($finder);
実際の使いかた <span id="practical-usage"></span>
---------------
--------------
あなたのアプリケーションの [エントリスクリプト](structure-entry-scripts.md) で `Yii.php` ファイルをインクルードするとき、
Yii は DI コンテナを作成します。この DI コンテナは [[Yii::$container]] を介してアクセス可能です。 [[Yii::createObject()]] を呼び出したとき、
このメソッドは実際には、新しいオブジェクトを作成ために、コンテナの [[yii\di\Container::get()|get()]] メソッドを呼び出しています。
前述のとおり、DI コンテナは(もしあれば)自動的に依存関係を解決し、新しく作成されたオブジェクトにそれらを注入します。
Yii は、新しいオブジェクトを作成するさいそのコアコードのほとんどで [[Yii::createObject()]] を使用しているため、これは、
Yii は、新しいオブジェクトを作成するさいそのコアコードのほとんどで [[Yii::createObject()]] を使用しているため、これは、
[[Yii::$container]] を扱えばグローバルにオブジェクトをカスタマイズすることができることを意味しています。
たとえば、 [[yii\widgets\LinkPager]] のページネーションボタンのデフォルト個数をグローバルにカスタマイズすることができます:
@ -262,7 +267,7 @@ Yii は、新しいオブジェクトを作成するさいそのコアコード
echo \yii\widgets\LinkPager::widget();
```
DIコンテナを経由して設定された値は、こうやって、まだまだ上書きすることができます:
ただし、DI コンテナを経由して設定された値を上書きすることは、まだ可能です:
```php
echo \yii\widgets\LinkPager::widget(['maxButtonCount' => 20]);
@ -301,8 +306,8 @@ class HotelController extends Controller
のインスタンスが作成され、コントローラのコンストラクタに3番目のパラメータとして注入されるようになります。
依存関係を登録するときに <span id="when-to-register-dependencies"></span>
-----------------------------
いつ依存関係を登録するか <span id="when-to-register-dependencies"></span>
------------------------
依存関係は、新しいオブジェクトが作成されるとき必要とされるので、それらの登録は可能な限り早期に行われるべきです。
推奨プラクティス以下のとおりです:
@ -314,13 +319,13 @@ class HotelController extends Controller
まとめ <span id="summary"></span>
-------
------
依存注入と [サービスロケータ](concept-service-locator.md) はともに、疎結合でよりテストしやすい方法でのソフトウェア構築を可能にする、
定番のデザインパターンです。依存注入とサービスロケータへのより深い理解を得るために、 [Martin の記事](http://martinfowler.com/articles/injection.html)
依存注入と [サービスロケータ](concept-service-locator.md) はともに、疎結合でよりテストしやすい方法でのソフトウェア構築を可能にする、
定番のデザインパターンです。依存注入とサービスロケータへのより深い理解を得るために、 [Martin の記事](http://martinfowler.com/articles/injection.html)
を読むことを強くお勧めします。
Yiiはその [サービスロケータ](concept-service-locator.md) を、依存注入(DI)コンテナの上に実装しています。
サービスロケータは、新しいオブジェクトのインスタンスを作成しようとしたとき、DI コンテナに呼び出しを転送します。
Yii はその [サービスロケータ](concept-service-locator.md) を、依存注入 (DI) コンテナの上に実装しています。
サービスロケータは、新しいオブジェクトのインスタンスを作成しようとするとき、DI コンテナに呼び出しを転送します。
後者は、依存関係を、上で説明したように自動的に解決します。

4
docs/guide-ja/concept-events.md

@ -13,12 +13,12 @@ Yiiはイベントをサポートするために、 [[yii\base\Component]] と
イベントハンドラ <span id="event-handlers"></span>
--------------
イベントハンドラとは、関連するイベントがトリガされたときに実行される、 [PHP コールバック](http://www.php.net/manual/en/language.types.callable.php)
イベントハンドラとは、関連するイベントがトリガされたときに実行される、 [PHP コールバック](http://www.php.net/manual/ja/language.types.callable.php)
です。次のコールバックのいずれも使用可能です:
- 文字列で指定されたグローバル PHP 関数 (括弧を除く) `'trim'` など
- オブジェクトとメソッド名文字列の配列で指定された、オブジェクトのメソッド (括弧を除く) `[$object, 'methodName']` など
- クラス名文字列とメソッド名文字列の配列で指定された、静的なクラスメソッド `[$class, 'methodName']` など
- クラス名文字列とメソッド名文字列の配列で指定された、静的なクラスメソッド (括弧を除く) `['ClassName', 'methodName']` など
- 無名関数 `function ($event) { ... }` など
イベントハンドラのシグネチャはこのようになります:

5
docs/guide-ja/concept-properties.md

@ -11,7 +11,8 @@ $object->label = trim($label);
```
上記のコードの欠点は、 `label` プロパティを設定するすべてのコードで、`trim()` を呼び出す必要があるということです。もし将来的に、
`label` プロパティに、最初の文字を大文字にしなければならない、といった新たな要件が発生したら、 `label` に値を代入するすべてのコードを変更しなければなりません。コードの繰り返しはバグを誘発するので、できれば避けたいところです。
`label` プロパティに、最初の文字を大文字にしなければならない、といった新たな要件が発生したら、 `label` に値を代入するすべてのコードを変更しなければなりません。
コードの繰り返しはバグを誘発するので、できれば避けたいところです。
この問題を解決するために、Yii は *getter* メソッドと *setter* メソッドをベースにしたプロパティ定義をサポートする、 [[yii\base\Object]] 基底クラスを提供します。
クラスがその機能を必要とするなら、 [[yii\base\Object]] またはその子クラスを継承しましょう。
@ -61,7 +62,7 @@ setter なしの getter で定義されたプロパティは、 *読み取り専
[[yii\base\InvalidCallException|InvalidCallException]] が発生します。同様に、getter なしの setter で定義されたプロパティは、
*書き込み専用* で、そのようなプロパティを読み取りしようとしても、例外が発生します。書き込み専用のプロパティを持つのは一般的ではありませんが。
getter と setter で定義されたプロパティには、いくつかの特別なルールと制限があります:
getter と setter で定義されたプロパティには、いくつかの特別なルールと制限があります:
* この種のプロパティでは、名前の *大文字と小文字を区別しません* 。たとえば、 `$object->label``$object->Label` は同じです。
これは、PHPのメソッド名が大文字と小文字を区別しないためです。

2
docs/guide-ja/concept-service-locator.md

@ -51,7 +51,7 @@ $cache = $locator->get('cache');
$cache = $locator->cache;
```
以上のように、 [[yii\di\ServiceLocator]] はコンポーネント ID を使用したプロパティのように、コンポーネントにアクセスすることができます。
上記のように、 [[yii\di\ServiceLocator]] を使うと、コンポーネント ID を使用して、プロパティのようにコンポーネントにアクセスすることができます。
あなたが最初にコンポーネントにアクセスしたとき、 [[yii\di\ServiceLocator]] はコンポーネントの登録情報を使用してコンポーネントの新しいインスタンスを作成し、
それを返します。後でそのコンポーネントが再度アクセスされた場合、サービスロケータは同じインスタンスを返します。

Loading…
Cancel
Save