Commit f647b65a by Nobuo Kihara

docs/guide-ja/intro-upgrade-from-v1.md - refined [ci skip]

parent d0ab9f5d
Yii 2.0 決定版ガイド Yii 2.0 決定版ガイド
==================== ====================
このチュートリアルは [Yii ドキュメント許条件](http://www.yiiframework.com/doc/terms/) の下にリリースされています。 このチュートリアルは [Yii ドキュメント許条件](http://www.yiiframework.com/doc/terms/) の下にリリースされています。
All Rights Reserved. All Rights Reserved.
...@@ -74,7 +74,7 @@ All Rights Reserved. ...@@ -74,7 +74,7 @@ All Rights Reserved.
データベースの取り扱い データベースの取り扱い
---------------------- ----------------------
* [データアクセスオブジェクト](db-dao.md): データベースへの接続、基本的なクエリ、トランザクション、および、スキーマ操作 * [データベースアクセスオブジェクト](db-dao.md): データベースへの接続、基本的なクエリ、トランザクション、および、スキーマ操作
* [クエリビルダ](db-query-builder.md): シンプルな抽象レイヤを使ってデータベースに対してクエリを行う * [クエリビルダ](db-query-builder.md): シンプルな抽象レイヤを使ってデータベースに対してクエリを行う
* [アクティブレコード](db-active-record.md): アクティブレコード ORM、レコードの読み出しと操作、リレーションの定義 * [アクティブレコード](db-active-record.md): アクティブレコード ORM、レコードの読み出しと操作、リレーションの定義
* [マイグレーション](db-migrations.md): チーム開発環境においてデータベースにバージョンコントロールを適用 * [マイグレーション](db-migrations.md): チーム開発環境においてデータベースにバージョンコントロールを適用
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
===================================== =====================================
Yii フレームワークは 2.0 のために完全に書き直されたため、バージョン 1.1 と 2.0 の間には数多くの違いがあります。 Yii フレームワークは 2.0 のために完全に書き直されたため、バージョン 1.1 と 2.0 の間には数多くの違いがあります。
結果として、バージョン 1.1 からのアップグレードは、マイナーバージョン間でのアップグレードのような些細な問題ではなくなりました。 結果として、バージョン 1.1 からのアップグレードは、マイナーバージョン間でのアップグレードのような些細な仕事ではなくなりました。
この節では、二つのバージョン間の主要な違いを説明します。 この節では、二つのバージョン間の主要な違いを説明します。
もし以前に Yii 1.1 を使ったことがなければ、あなたはこの節を飛ばして直接に "[始めよう](start-installation.md)" に進んでも、問題はありません。 もし以前に Yii 1.1 を使ったことがなければ、あなたはこの節を飛ばして直接に "[始めよう](start-installation.md)" に進んでも、問題はありません。
...@@ -43,7 +43,7 @@ Yii 2.0 縺ッ PHP 5.4 莉・荳翫r蠢ヲ√→縺励∪縺吶1HP 5.4 縺ッ縲〆ii 1.1 縺ォ繧医 ...@@ -43,7 +43,7 @@ Yii 2.0 縺ッ PHP 5.4 莉・荳翫r蠢ヲ√→縺励∪縺吶1HP 5.4 縺ッ縲〆ii 1.1 縺ォ繧医
名前空間 名前空間
-------- --------
Yii 2.0 での最も明らかな変更は名前空間の使用です。 Yii 2.0 での最も顕著な変更は名前空間の使用です。
ほとんど全てのコアクラスが、例えば、`yii\web\Request` のように名前空間に属します。 ほとんど全てのコアクラスが、例えば、`yii\web\Request` のように名前空間に属します。
クラス名に "C" の接頭辞はもう使われません。 クラス名に "C" の接頭辞はもう使われません。
命名のスキームはディレクトリ構造に従うようになりました。 命名のスキームはディレクトリ構造に従うようになりました。
...@@ -56,7 +56,7 @@ Yii 2.0 縺ァ縺ョ譛繧よ繧峨°縺ェ螟画峩縺ッ蜷榊燕遨コ髢薙菴ソ逕ィ縺ァ縺吶 ...@@ -56,7 +56,7 @@ Yii 2.0 縺ァ縺ョ譛繧よ繧峨°縺ェ螟画峩縺ッ蜷榊燕遨コ髢薙菴ソ逕ィ縺ァ縺吶
---------------------------- ----------------------------
Yii 2.0 は、1.1 の `CComponent` クラスを二つのクラス、すなわち、[[yii\base\Object]] と [[yii\base\Component]] に分割しました。 Yii 2.0 は、1.1 の `CComponent` クラスを二つのクラス、すなわち、[[yii\base\Object]] と [[yii\base\Component]] に分割しました。
[[yii\base\Object|Object]] クラスは、ゲッターとセッターを通じて [オブジェクトプロパティ](concept-properties.md) を定義することを可能にする軽量な基底クラスです。 [[yii\base\Object|Object]] クラスは、ゲッターとセッターを通じて [オブジェクトプロパティ](concept-properties.md) を定義することを可能にする、軽量な基底クラスです。
[[yii\base\Component|Component]] クラスは [[yii\base\Object|Object]] からの拡張であり、[イベント](concept-events.md)[ビヘイビア](concept-behaviors.md) をサポートします。 [[yii\base\Component|Component]] クラスは [[yii\base\Object|Object]] からの拡張であり、[イベント](concept-events.md)[ビヘイビア](concept-behaviors.md) をサポートします。
あなたのクラスがイベントやビヘイビアの機能を必要としない場合は、[[yii\base\Object|Object]] を基底クラスとして使うことを考慮すべきです。 あなたのクラスがイベントやビヘイビアの機能を必要としない場合は、[[yii\base\Object|Object]] を基底クラスとして使うことを考慮すべきです。
...@@ -92,7 +92,7 @@ class MyClass extends \yii\base\Object ...@@ -92,7 +92,7 @@ class MyClass extends \yii\base\Object
構成情報の配列に含まれる「名前-値」のペアが、コンストラクタの最後でプロパティを構成します。 構成情報の配列に含まれる「名前-値」のペアが、コンストラクタの最後でプロパティを構成します。
[[yii\base\Object::init()|init()]] メソッドをオーバーライドして、構成情報が適用された後に行うべき初期化処理を行うことが出来ます。 [[yii\base\Object::init()|init()]] メソッドをオーバーライドして、構成情報が適用された後に行うべき初期化処理を行うことが出来ます。
この規約に従うことによって、構成情報の配列を使って新しいオブジェクトを生成して構成することが出来るようになります。 この規約に従うことによって、新しいオブジェクトを生成して構成するときに、構成情報配列を使うことが出来るようになります。
```php ```php
$object = Yii::createObject([ $object = Yii::createObject([
...@@ -132,7 +132,7 @@ $component->on($eventName, $handler); ...@@ -132,7 +132,7 @@ $component->on($eventName, $handler);
-------------- --------------
Yii 2.0 は、パスエイリアスの使用を、ファイル/ディレクトリのパスと URL の両方に広げました。 Yii 2.0 は、パスエイリアスの使用を、ファイル/ディレクトリのパスと URL の両方に広げました。
また、Yii 2.0 では、通常のファイル/ディレクトリのパスまたは URL と区別するために、エイリアス名は `@` という文字で始まることが要求されるようになりました。 また、Yii 2.0 では、通常のファイル/ディレクトリのパスや URL と区別するため、エイリアス名は `@` という文字で始まることが要求されるようになりました。
例えば、`@yii` というエイリアスは Yii のインストールディレクトリを指します。 例えば、`@yii` というエイリアスは Yii のインストールディレクトリを指します。
パスエイリアスは Yii のコアコードのほとんどの場所でサポートされています。 パスエイリアスは Yii のコアコードのほとんどの場所でサポートされています。
例えば [[yii\caching\FileCache::cachePath]] はパスエイリアスと通常のディレクトリパスの両方を受け取ることが出来ます。 例えば [[yii\caching\FileCache::cachePath]] はパスエイリアスと通常のディレクトリパスの両方を受け取ることが出来ます。
...@@ -150,7 +150,7 @@ Yii 2.0 縺ッ縲√ヱ繧ケ繧ィ繧、繝ェ繧「繧ケ縺ョ菴ソ逕ィ繧偵√ヵ繧。繧、繝ォ/繝ぅ繝ャ繧ッ繝医 ...@@ -150,7 +150,7 @@ Yii 2.0 縺ッ縲√ヱ繧ケ繧ィ繧、繝ェ繧「繧ケ縺ョ菴ソ逕ィ繧偵√ヵ繧。繧、繝ォ/繝ぅ繝ャ繧ッ繝医
ビュー ビュー
------ ------
Yii 2 のビューについての最も顕著な変更は、ビューの中の `$this` という特殊な変数がカレントコントローラやウィジェットを指すものではなくなった、ということです。 Yii 2 のビューについての最も顕著な変更は、ビューの中の `$this` という特殊な変数が現在のコントローラやウィジェットを指すものではなくなった、ということです。
今や `$this` は 2.0 で新しく導入された概念である *ビュー* オブジェクトを指します。 今や `$this` は 2.0 で新しく導入された概念である *ビュー* オブジェクトを指します。
*ビュー* オブジェクトは [[yii\web\View]] という型であり、MVC パターンのビューの部分を表すものです。 *ビュー* オブジェクトは [[yii\web\View]] という型であり、MVC パターンのビューの部分を表すものです。
ビューにおいてコントローラやウィジェットにアクセスしたい場合は、`$this->context` を使うことが出来ます。 ビューにおいてコントローラやウィジェットにアクセスしたい場合は、`$this->context` を使うことが出来ます。
...@@ -175,10 +175,10 @@ Prado 繝Φ繝励Ξ繝シ繝医お繝ウ繧ク繝ウ縺ッ繧ゅ繧し繝昴繝医&繧後※縺∪縺帙 ...@@ -175,10 +175,10 @@ Prado 繝Φ繝励Ξ繝シ繝医お繝ウ繧ク繝ウ縺ッ繧ゅ繧し繝昴繝医&繧後※縺∪縺帙
Yii 2.0 は [[yii\base\Model]] を 1.1 における `CModel` と同様な基底モデルとして使います。 Yii 2.0 は [[yii\base\Model]] を 1.1 における `CModel` と同様な基底モデルとして使います。
`CFormModel` というクラスは完全に廃止されました。 `CFormModel` というクラスは完全に廃止されました。
Yii 2 では、それの代りに [yii\base\Model]] を拡張して、フォームモデルクラスを作成すべきです。 Yii 2 では、それの代りに [yii\base\Model]] を拡張して、フォームのモデルクラスを作成すべきです。
Yii 2.0 は サポートされるシナリオを宣言するための [[yii\base\Model::scenarios()|scenarios()]] という新しいメソッドを導入しました。 Yii 2.0 は サポートされるシナリオを宣言するための [[yii\base\Model::scenarios()|scenarios()]] という新しいメソッドを導入しました。
このメソッドを使って、あるシナリオの下で、どの属性が検証される必要があるか、また、どの属性が安全とみなされるか否か、などを宣言することが出来ます。 このメソッドを使って、どのシナリオの下で、ある属性が検証される必要があるか、また、安全とみなされるか否か、などを宣言することが出来ます。
例えば、 例えば、
```php ```php
...@@ -196,12 +196,12 @@ public function scenarios() ...@@ -196,12 +196,12 @@ public function scenarios()
`frontend` シナリオでは、`email` は一括代入が可能ですが、`role` は不可能です。 `frontend` シナリオでは、`email` は一括代入が可能ですが、`role` は不可能です。
`email``role` は、両方とも、規則を使って検証されなければなりません。 `email``role` は、両方とも、規則を使って検証されなければなりません。
[[yii\base\Model::rules()|rules()]] メソッドが Yii 1.1 同様に検証規則を宣言するために使われます。 [[yii\base\Model::rules()|rules()]] メソッドが、Yii 1.1 に引き続き、検証規則を宣言するために使われます。
[[yii\base\Model::scenarios()|scenarios()]] が導入されたことにより、`unsafe` バリデータが無くなったことに注意してください。 [[yii\base\Model::scenarios()|scenarios()]] が導入されたことにより、`unsafe` バリデータが無くなったことに注意してください。
ほとんどの場合、すなわち、[[yii\base\Model::rules()|rules()]] メソッドが存在しうるシナリオを完全に規定しているなら、そして `unsafe` な属性を宣言する必要が無いなら、[[yii\base\Model::scenarios()|scenarios()]] をオーバーライドする必要はありません。 ほとんどの場合、すなわち、[[yii\base\Model::rules()|rules()]] メソッドが存在しうるシナリオを完全に指定しており、そして `unsafe` な属性を宣言する必要が無いなら、[[yii\base\Model::scenarios()|scenarios()]] をオーバーライドする必要はありません。
モデルについてさらに詳細を学習するために、[モデル](structure-models.md) の節を参照してください。 モデルについての詳細を学習するためには、[モデル](structure-models.md) の節を参照してください。
コントローラ コントローラ
...@@ -211,7 +211,7 @@ Yii 2.0 縺ッ [[yii\web\Controller]] 繧貞渕蠎輔繧ウ繝ウ繝医Ο繝シ繝ゥ繧ッ繝ゥ繧ケ縺ィ縺 ...@@ -211,7 +211,7 @@ Yii 2.0 縺ッ [[yii\web\Controller]] 繧貞渕蠎輔繧ウ繝ウ繝医Ο繝シ繝ゥ繧ッ繝ゥ繧ケ縺ィ縺
これは Yii 1.1 における`CController` と同様なクラスです。 これは Yii 1.1 における`CController` と同様なクラスです。
[[yii\base\Action]] がアクションクラスの基底クラスです。 [[yii\base\Action]] がアクションクラスの基底クラスです。
これらに関する変更があなたのコードに及ぼす最も顕著な影響は、コントローラのアクションは表示したいコンテンツを、エコーするのでなく、返さなければならない、ということです。 コントローラに関して、あなたのコードに最も顕著な影響を及ぼす変更点は、コントローラのアクションは表示したいコンテントを、エコーするのでなく、返さなければならなくなった、ということです。
```php ```php
public function actionView($id) public function actionView($id)
...@@ -258,10 +258,9 @@ ActiveForm::end(); ...@@ -258,10 +258,9 @@ ActiveForm::end();
テーマ テーマ
------ ------
テーマは 2.0 では完全に違う動き方をします。 テーマは 2.0 では完全に違う動作をします。
テーマは、ソースのビューファイルパスをテーマのビューファイルパスにマップするパスマッピング機構に基づくものになりました。 テーマは、ソースのビューファイルパスをテーマのビューファイルパスにマップするパスマッピング機構に基づくものになりました。
例えば、あるテーマのパスマップが `['/web/views' => '/web/themes/basic']` である場合、 例えば、あるテーマのパスマップが `['/web/views' => '/web/themes/basic']` である場合、ビューファイル `/web/views/site/index.php` のテーマ版は `/web/themes/basic/site/index.php` になります。
ビューファイル `/web/views/site/index.php` のテーマ適用版は `/web/themes/basic/site/index.php` になります。
この理由により、テーマはどのようなビューファイルに対してでも適用することが出来るようになりました。 この理由により、テーマはどのようなビューファイルに対してでも適用することが出来るようになりました。
コントローラやウィジェットのコンテキストの外で表示されるビューに対してすら、適用できます。 コントローラやウィジェットのコンテキストの外で表示されるビューに対してすら、適用できます。
...@@ -293,7 +292,7 @@ Yii 2.0 縺ッ繧ウ繝。繝ウ繝医ヶ繝ュ繝け縺九i繧ウ繝槭Φ繝峨繝倥Ν繝玲ュ蝣ア繧定蜍 ...@@ -293,7 +292,7 @@ Yii 2.0 縺ッ繧ウ繝。繝ウ繝医ヶ繝ュ繝け縺九i繧ウ繝槭Φ繝峨繝倥Ν繝玲ュ蝣ア繧定蜍
Yii 2.0 は [PECL intl PHP モジュール](http://pecl.php.net/package/intl) に賛同して、内蔵の日付フォーマッタと数字フォーマッタの部品を取り除きました。 Yii 2.0 は [PECL intl PHP モジュール](http://pecl.php.net/package/intl) に賛同して、内蔵の日付フォーマッタと数字フォーマッタの部品を取り除きました。
メッセージは `i18n` アプリケーションコンポーネント経由で翻訳されるようになりました。 メッセージは `i18n` アプリケーションコンポーネント経由で翻訳されるようになりました。
このコンポーネントは一連のメッセージソースを管理するもので、メッセージのカテゴリに基づいて異なるメッセージソースを使うことを許容するものです。 このコンポーネントは一連のメッセージソースを管理するもので、メッセージのカテゴリに基づいて異なるメッセージソースを使うことを可能にするものです。
詳細については [国際化](tutorial-i18n.md) の節を参照してください。 詳細については [国際化](tutorial-i18n.md) の節を参照してください。
...@@ -301,7 +300,7 @@ Yii 2.0 縺ッ [PECL intl PHP 繝「繧ク繝・繝シ繝ォ](http://pecl.php.net/package/intl) 縺 ...@@ -301,7 +300,7 @@ Yii 2.0 縺ッ [PECL intl PHP 繝「繧ク繝・繝シ繝ォ](http://pecl.php.net/package/intl) 縺
アクションフィルタ アクションフィルタ
------------------ ------------------
新しいアクションフィルタはビヘイビアによって実装されています。 アクションフィルタはビヘイビアによって実装されるようになりました。
新しいカスタムフィルタを定義するためには、[[yii\base\ActionFilter]] を拡張します。 新しいカスタムフィルタを定義するためには、[[yii\base\ActionFilter]] を拡張します。
フィルタを使うためには、そのフィルタクラスをビヘイビアとしてコントローラにアタッチします。 フィルタを使うためには、そのフィルタクラスをビヘイビアとしてコントローラにアタッチします。
例えば、[[yii\filters\AccessControl]] を使うためには、コントローラに次のコードを書くことになります。 例えば、[[yii\filters\AccessControl]] を使うためには、コントローラに次のコードを書くことになります。
...@@ -329,7 +328,7 @@ public function behaviors() ...@@ -329,7 +328,7 @@ public function behaviors()
Yii 2.0 は、*アセットバンドル* と呼ばれる新しい概念を導入しました。これは、Yii 1.1 にあったスクリプトパッケージの概念を置き換えるものです。 Yii 2.0 は、*アセットバンドル* と呼ばれる新しい概念を導入しました。これは、Yii 1.1 にあったスクリプトパッケージの概念を置き換えるものです。
アセットバンドルは、あるディレクトリの下に集められた一群のアセットファイル (例えば、JavaScript ファイル、CSS ファイル、イメージファイルなど) です。 アセットバンドルは、あるディレクトリの下に集められた一群のアセットファイル (例えば、JavaScript ファイル、CSS ファイル、イメージファイルなど) です。
それぞれのアセットバンドルは [[yii\web\AssetBundle]] を拡張したクラスとして表されます。 それぞれのアセットバンドルは [[yii\web\AssetBundle]] を拡張したクラスとして表わされます。
アセットバンドルを [[yii\web\AssetBundle::register()]] を通じて登録することによって、そのバンドルに含まれるアセットにウェブ経由でアクセスできるようになります。 アセットバンドルを [[yii\web\AssetBundle::register()]] を通じて登録することによって、そのバンドルに含まれるアセットにウェブ経由でアクセスできるようになります。
Yii 1 とは異なり、バンドルを登録したページは、そのバンドルで指定されている JavaScript と CSS ファイルへの参照を自動的に含むようになります。 Yii 1 とは異なり、バンドルを登録したページは、そのバンドルで指定されている JavaScript と CSS ファイルへの参照を自動的に含むようになります。
...@@ -440,8 +439,8 @@ $orders = $customer->getOrders()->andWhere('status=1')->all(); ...@@ -440,8 +439,8 @@ $orders = $customer->getOrders()->andWhere('status=1')->all();
Yii 2.0 では、JOIN を使わずに二つの SQL 文が実行されます。 Yii 2.0 では、JOIN を使わずに二つの SQL 文が実行されます。
すなわち、第一の SQL 文が主たるレコードを返し、第二の SQL 文は主レコードのプライマリキーを使うフィルタリングによって関連レコードを返します。 すなわち、第一の SQL 文が主たるレコードを返し、第二の SQL 文は主レコードのプライマリキーを使うフィルタリングによって関連レコードを返します。
多数のレコードを返すクエリを構築するときは、[[yii\db\ActiveRecord|ActiveRecord]] を返す代りに、[[yii\db\ActiveQuery::asArray()|asArray()]] メソッドをチェインして、クエリ結果を配列として返すことが出来ます。 多数のレコードを返すクエリを構築するときは、[[yii\db\ActiveRecord|ActiveRecord]] を返す代りに、[[yii\db\ActiveQuery::asArray()|asArray()]] メソッドをチェインすることが出来ます。
うすると、レコードの数が多い場合は、必要な CPU 時間とメモリを著しく削減することが出来ます。 うすると、クエリ結果は配列として返されることになり、レコードの数が多い場合は、必要な CPU 時間とメモリを著しく削減することが出来ます。
例えば、 例えば、
```php ```php
...@@ -449,7 +448,7 @@ $customers = Customer::find()->asArray()->all(); ...@@ -449,7 +448,7 @@ $customers = Customer::find()->asArray()->all();
``` ```
もう一つの変更点は、属性のデフォルト値を public なプロパティによって定義することは出来なくなった、ということです。 もう一つの変更点は、属性のデフォルト値を public なプロパティによって定義することは出来なくなった、ということです。
デフォルト値が必要な場合は、アクティブレコードクラスの `init` メソッドの中で設定しなければなりません。 デフォルト値を定義する必要がある場合は、アクティブレコードクラスの `init` メソッドの中で設定しなければなりません。
```php ```php
public function init() public function init()
...@@ -506,7 +505,7 @@ User 縺ィ IdentityInterface ...@@ -506,7 +505,7 @@ User 縺ィ IdentityInterface
そして `CUserIdentity` クラスはもうありません。代りに、使い方がもっと単純な [[yii\web\IdentityInterface]] を実装すべきです。 そして `CUserIdentity` クラスはもうありません。代りに、使い方がもっと単純な [[yii\web\IdentityInterface]] を実装すべきです。
アドバンストアプリケーションテンプレートがそういう例を提供しています。 アドバンストアプリケーションテンプレートがそういう例を提供しています。
詳細は [認証](security-authentication.md)[権限](security-authorization.md)、そして [アドバンストアプリケーションテンプレート](tutorial-advanced-app.md) の節を参照してください。 詳細は [認証](security-authentication.md)[権限付与](security-authorization.md)、そして [アドバンストアプリケーションテンプレート](tutorial-advanced-app.md) の節を参照してください。
URL 管理 URL 管理
......
...@@ -21,7 +21,7 @@ Yii を他のフレームワークと比べると ...@@ -21,7 +21,7 @@ Yii を他のフレームワークと比べると
- ほとんどの PHP フレームワーク同様、Yii は MVC (Model-View-Controller) デザインパターンを実装し、このパターンに基づいたコードの組織化を推進しています。 - ほとんどの PHP フレームワーク同様、Yii は MVC (Model-View-Controller) デザインパターンを実装し、このパターンに基づいたコードの組織化を推進しています。
- Yii は、コードはシンプルかつエレガントに書かれるべきである、という哲学を採用しています。 - Yii は、コードはシンプルかつエレガントに書かれるべきである、という哲学を採用しています。
何らかのデザインパターンの厳密な遵守を主目的とする凝りすぎた設計には、Yii は決して手を出しません。 何らかのデザインパターンの厳密な遵守を主な目的とする凝りすぎた設計を、Yii がしようと試みることは決してありません。
- Yii はフル装備のフレームワークです。 - Yii はフル装備のフレームワークです。
クエリビルダ、リレーショナルデータベースと NoSQL データベースの双方のためのアクティブレコード、RESTful API 開発サポート、多層構成のキャッシュサポート、その他、検証済みで直ちに使える多数の機能を提供します。 クエリビルダ、リレーショナルデータベースと NoSQL データベースの双方のためのアクティブレコード、RESTful API 開発サポート、多層構成のキャッシュサポート、その他、検証済みで直ちに使える多数の機能を提供します。
- Yii は極めて拡張性の高いフレームワークです。あなたはコアのコードのほとんど全ての要素をカスタマイズしたり置き換えたりすることが出来ます。 - Yii は極めて拡張性の高いフレームワークです。あなたはコアのコードのほとんど全ての要素をカスタマイズしたり置き換えたりすることが出来ます。
......
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