Commit 59b4d725 by Nobuo Kihara

docs/guide-ja/intro-upgrade-from-v1.md - revised using "初期設定" and "設定情報" for…

docs/guide-ja/intro-upgrade-from-v1.md - revised using "初期設定" and "設定情報" for "configuration(s)" [ci skip]
parent fcb60595
......@@ -5,11 +5,11 @@ Yii 繝輔Ξ繝シ繝繝ッ繝シ繧ッ縺ッ 2.0 縺ョ縺溘a縺ォ螳悟縺ォ譖ク縺咲峩縺輔l縺溘◆繧√
結果として、バージョン 1.1 からのアップグレードは、マイナーバージョン間でのアップグレードのような些細な問題ではなくなりました。
この節では、二つのバージョン間の主要な違いを説明します。
もし以前に Yii 1.1 を使ったことがなければ、あなたはこの節を飛ばして直接に "[始めよう](start-installation.md)" に進んでも大丈夫です。
もし以前に Yii 1.1 を使ったことがなければ、あなたはこの節を飛ばして直接に "[始めよう](start-installation.md)" に進んでも、問題はありません。
Yii 2.0 は、この要約でカバーされているよりも多くの新機能を導入していることに注意してください。
公式ガイド全体を通読して全ての新機能について学習することを強く推奨します。
おそらく、以前は自分自身で開発しなければならなかったいくつかの機能が、今ではコアコードの一部になっていることに気付くでしょう。
決定版ガイド全体を通読して全ての新機能について学習することを強く推奨します。
おそらく、以前は自分自身で開発する必要があったいくつかの機能が、今ではコアコードの一部になっていることに気付くでしょう。
インストール
......@@ -18,8 +18,8 @@ Yii 2.0 縺ッ縲√%縺ョ隕∫エ〒繧ォ繝舌縺輔l縺ヲ縺k繧医j繧ょ、壹¥縺ョ譁ー讖溯
Yii 2.0 は、事実上の標準的 PHP パッケージ管理ソフトである [Composer](https://getcomposer.org/) を全面的に採用しています。
コアフレームワークも、エクステンションも、インストールは Composer を通じて処理されます。
[Yii をインストールする](start-installation.md) の節を参照して、Yii 2.0 をインストールする方法を学習してください。
新しいエクステンションを作成したい場合、または既存の 1.1 エクステンションを 2.0 互換のエクステンションに変換したい場合は、
ガイドの [クステンションを作成する](structure-extensions.md#creating-extensions) の節を参照してください。
新しいエクステンションを作成したい場合、または既存の 1.1 エクステンションを 2.0 互換のエクステンションに作り直したい場合は、ガイドの
[エクステンションを作成する](structure-extensions.md#creating-extensions) の節を参照してください。
PHP の必要条件
......@@ -27,7 +27,7 @@ PHP 縺ョ蠢ヲ∵擅莉カ
Yii 2.0 は PHP 5.4 以上を必要とします。PHP 5.4 は、Yii 1.1 によって必要とされていた PHP 5.2 に比べて、非常に大きく改良されています。
この結果として、注意を払うべき言語レベルでの違いが数多くあります。
以下は PHP に関する主要な変更点の要約です:
以下は PHP に関する主要な変更点の要約です。
- [名前空間](http://php.net/manual/ja/language.namespaces.php)
- [無名関数](http://php.net/manual/ja/functions.anonymous.php)
......@@ -55,26 +55,26 @@ 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\Component|Component]] クラスは [[yii\base\Object|Object]] からの拡張であり、[イベント](concept-events.md)[ビヘイビア](concept-behaviors.md) をサポートします。
あなたのクラスがイベントやビヘイビアの機能を必要としない場合は、[[yii\base\Object|Object]] を基底クラスとして使うことを考慮すべきです。
通常、基本的なデータ構造を表すクラスに対しては、このことが当てはまります
通常は、基本的なデータ構造を表すクラスに対して、このことが当てはまります
オブジェクトのコンフィギュレーション
------------------------------------
オブジェクトの初期設定
----------------------
[[yii\base\Object|Object]] クラスはオブジェクトのコンフィギュレーションのための統一された方法を導入しています。
[[yii\base\Object|Object]] の全ての派生クラスは、適切にコンフィギュレーションを適用されるように、コンストラクタを(それが必要な場合には)以下の方法で宣言すべきです:
[[yii\base\Object|Object]] クラスはオブジェクトの初期設定のための統一された方法を導入しています。
[[yii\base\Object|Object]] の全ての派生クラスは、コンストラクタが必要な場合には、インスタンスが正しく初期設定されるように、コンストラクタを以下のようにして宣言しなければなりません。
```php
class MyClass extends \yii\base\Object
{
public function __construct($param1, $param2, $config = [])
{
// ... コンフィギュレーションが適用される前の初期化処理
// ... 設定情報が適用される前の初期化処理
parent::__construct($config);
}
......@@ -83,16 +83,16 @@ class MyClass extends \yii\base\Object
{
parent::init();
// ... コンフィギュレーションが適用された後の初期化処理
// ... 設定情報が適用された後の初期化処理
}
}
```
上記において、コンストラクタは最後のパラメータとしてコンフィギュレーション配列を取らなければなりません。
コンフィギュレーション配列は「名前-値」のペアを含むものであり、コンストラクタの最後でプロパティを初期化するためのものです。
[[yii\base\Object::init()|init()]] メソッドをオーバーライドして、コンフィギュレーションが適用された後に行うべき初期化処理を行うことが出来ます。
上記のように、コンストラクタは最後のパラメータとして設定情報の配列を取らなければなりません。
設定情報の配列に含まれる「名前-値」のペアが、コンストラクタの最後でプロパティを初期設定します。
[[yii\base\Object::init()|init()]] メソッドをオーバーライドして、設定情報が適用された後に行うべき初期化処理を行うことが出来ます。
この規約に従うことによって、コンフィギュレーション配列を使って新しいオブジェクトを生成して設定することが出来るようになります:
この規約に従うことによって、設定情報の配列を使って新しいオブジェクトを生成して初期設定することが出来るようになります。
```php
$object = Yii::createObject([
......@@ -102,30 +102,30 @@ $object = Yii::createObject([
], [$param1, $param2]);
```
コンフィギュレーションに関する更なる詳細は、[オブジェクトのコンフィギュレーション](concept-configurations.md) の節で見ることが出来ます。
設定情報に関する詳細は、[オブジェクトの設定情報](concept-configurations.md) の節で見ることが出来ます。
イベント
--------
Yii 1 では、イベントは `on` メソッドを定義することにより作成されました。
Yii 1 では、イベントは `on` メソッド (例えば、`onBeforeSave`) を定義することによって作成されました。
Yii 2 では、どのようなイベント名でも使うことが出来るようになりました。
[[yii\base\Component::trigger()|trigger()]] メソッドをコールしてイベントを発生させます:
[[yii\base\Component::trigger()|trigger()]] メソッドを呼んでイベントを発生させます。
```php
$event = new \yii\base\Event;
$component->trigger($eventName, $event);
```
イベントにハンドラを付けるためには、[[yii\base\Component::on()|on()]] メソッドを使います:
イベントにハンドラをアタッチするためには、[[yii\base\Component::on()|on()]] メソッドを使います。
```php
$component->on($eventName, $handler);
// ハンドラを切り離すためには、以下のようにします:
// ハンドラをデタッチするためには、以下のようにします。
// $component->off($eventName, $handler);
```
イベント関連の機能には数多くの改良がなされました。更なる詳細は [イベント](concept-events.md) の節を参照してください。
イベントの機能には数多くの改良がなされました。詳細は [イベント](concept-events.md) の節を参照してください。
パスエイリアス
......@@ -138,11 +138,11 @@ Yii 2.0 縺ッ縲√ヱ繧ケ繧ィ繧、繝ェ繧「繧ケ縺ョ菴ソ逕ィ繧偵√ヵ繧。繧、繝ォ/繝ぅ繝ャ繧ッ繝医
例えば [[yii\caching\FileCache::cachePath]] はパスエイリアスと通常のディレクトリパスの両方を受け取ることが出来ます。
パスエイリアスは、また、クラスの名前空間とも密接に関係しています。
ルートの名前空間のそれぞれに対してパスエイリアスを定義することが推奨されています。
そうすることによって、よけいなコンフィギュレーションをしなくても、Yii のクラスオートローダを使うことが出来るようになります。
例えば、`@yii` は Yii のインストールディレクトリを指しているので、`yii\web\Request` というようなクラスをオートロードすることが出来ます。
サードパーティのライブラリ、例えば Zend フレームワークなどを使う場合には、そのフレームワークのインストールディレクトリを指す `@Zend` というパスエイリアスを定義することが出来ます。
一旦そうしてしまえば、その Zend フレームワークのライブラリ中のどんなクラスでも、同じようにオートロードすることが出来るようになります。
ルートの名前空間に対しては、それぞれ、パスエイリアスを定義することが推奨されます。
そうすれば、余計な初期設定をしなくても、Yii のクラスオートローダを使うことが出来るようになります。
例えば、`@yii` が Yii のインストールディレクトリを指しているので、`yii\web\Request` というようなクラスをオートロードすることが出来る訳です。
サードパーティのライブラリ、例えば Zend フレームワークなどを使う場合にも、そのフレームワークのインストールディレクトリを指す `@Zend` というパスエイリアスを定義することが出来ます。
一旦そうしてしまえば、その Zend フレームワークのライブラリ内のどんなクラスでも、Yii からオートロードすることが出来るようになります。
パスエイリアスに関する詳細は [エイリアス](concept-aliases.md) の節を参照してください。
......@@ -150,22 +150,23 @@ Yii 2.0 縺ッ縲√ヱ繧ケ繧ィ繧、繝ェ繧「繧ケ縺ョ菴ソ逕ィ繧偵√ヵ繧。繧、繝ォ/繝ぅ繝ャ繧ッ繝医
ビュー
------
Yii 2 のビューについての最も顕著な変更は、ビューの中で `$this` という特殊な変数がカレントコントローラやウィジェットを指すものではなくなったということです。
Yii 2 のビューについての最も顕著な変更は、ビューの中の `$this` という特殊な変数がカレントコントローラやウィジェットを指すものではなくなった、ということです。
今や `$this` は 2.0 で新しく導入された概念である *ビュー* オブジェクトを指します。
*ビュー* オブジェクトは [[yii\web\View]] という型であり、MVC パターンのビューの部分を表すものです。
ビューにおいてコントローラやウィジェットにアクセスしたい場合は、`$this->context` を使うことが出来ます。
パーシャルビューを別のビューの中で表示するためには、`$this->renderPartial()` ではなく、`$this->render()` を使います。
`render` の呼び出しは、2.0 では明示的に echo しなくてはなりません。と言うのは、`render()` メソッドは、直接に表示するのではなく、レンダリング結果を文字列として返すものだからです。
例えば:
パーシャルビューを別のビューの中でレンダリングするためには、`$this->renderPartial()` ではなく、`$this->render()` を使います。
さらに、`render` の呼び出しは、2.0 では明示的に echo しなくてはなりません。
と言うのは、`render()` メソッドは、レンダリング結果を返すものであり、それを直接に表示するものではないからです。
例えば、
```php
echo $this->render('_item', ['item' => $item]);
```
PHP を主たるテンプレート言語として使うのに加えて、Yii 2.0 は人気のある二つのテンプレートエンジン、Smarty と Twig に対する正式なサポートを備えています。
Prado テンプレートエンジンはもうサポートされません。
これらのテンプレートエンジンを使うためには、[[yii\base\View::$renderers|View::$renderers]] プロパティをセットして、`view` アプリケーションコンポーネントを構成する必要があります。
PHP を主たるテンプレート言語として使う以外に、Yii 2.0 は人気のある二つのテンプレートエンジン、Smarty と Twig に対する正式なサポートを備えています。
Prado テンプレートエンジンはもはやサポートされていません。
これらのテンプレートエンジンを使うためには、[[yii\base\View::$renderers|View::$renderers]] プロパティをセットして、`view` アプリケーションコンポーネントを初期設定する必要があります。
詳細は [テンプレートエンジン](tutorial-template-engines.md) の節を参照してください。
......@@ -174,11 +175,11 @@ Prado 繝Φ繝励Ξ繝シ繝医お繝ウ繧ク繝ウ縺ッ繧ゅ≧繧オ繝昴繝医&繧後∪縺帙s縲
Yii 2.0 は [[yii\base\Model]] を 1.1 における `CModel` と同様な基底モデルとして使います。
`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
public function scenarios()
......@@ -190,7 +191,7 @@ public function scenarios()
}
```
上記では二つのシナリオが宣言されています: `backend``frontend` です。
上記では二つのシナリオ、すなわち、`backend``frontend` が宣言されています。
`backend` シナリオでは、`email``role` の属性が両方とも安全であり、一括代入が可能です。
`frontend` シナリオでは、`email` は一括代入が可能ですが、`role` は不可能です。
`email``role` は、両方とも、規則を使って検証されなければなりません。
......@@ -198,7 +199,7 @@ public function scenarios()
[[yii\base\Model::rules()|rules()]] メソッドが Yii 1.1 同様に検証規則を宣言するために使われます。
[[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) の節を参照してください。
......@@ -210,7 +211,7 @@ Yii 2.0 縺ッ [[yii\web\Controller]] 繧貞渕蠎輔繧ウ繝ウ繝医Ο繝シ繝ゥ繧ッ繝ゥ繧ケ縺ィ縺
これは Yii 1.1 における`CController` と同様なクラスです。
[[yii\base\Action]] がアクションクラスの基底クラスです。
これらに関する変更があなたのコードに及ぼす影響で最も明らかなものは、コントローラのアクションは表示したいコンテンツを、エコーするのでなく、返さなければならない、ということです。
これらに関する変更があなたのコードに及ぼす最も顕著な影響は、コントローラのアクションは表示したいコンテンツを、エコーするのでなく、返さなければならない、ということです。
```php
public function actionView($id)
......@@ -224,7 +225,7 @@ public function actionView($id)
}
```
コントローラに関する更なる詳細については [コントローラ](structure-controllers.md) の節を参照してください。
コントローラに関する詳細については [コントローラ](structure-controllers.md) の節を参照してください。
ウィジェット
......@@ -233,7 +234,7 @@ public function actionView($id)
Yii 2.0 は [[yii\base\Widget]] を基底のウィジェットクラスとして使用します。これは Yii 1.1 の `CWidget` と同様なクラスです。
いろんな IDE においてフレームワークに対するより良いサポートを得るために、Yii 2.0 はウィジェットを使うための新しい構文を導入しました。
スタティックなメソッド [[yii\base\Widget::begin()|begin()]]、[[yii\base\Widget::end()|end()]]、そして [[yii\base\Widget::widget()|widget()]] が導入されました。以下のようにして使います:
スタティックなメソッド [[yii\base\Widget::begin()|begin()]]、[[yii\base\Widget::end()|end()]]、そして [[yii\base\Widget::widget()|widget()]] が導入されました。以下のようにして使います。
```php
use yii\widgets\Menu;
......@@ -251,7 +252,7 @@ $form = ActiveForm::begin([
ActiveForm::end();
```
更なる詳細については [ウィジェット](structure-widgets.md) の節を参照してください。
細については [ウィジェット](structure-widgets.md) の節を参照してください。
テーマ
......@@ -265,25 +266,25 @@ ActiveForm::end();
コントローラやウィジェットのコンテキストの外で表示されるビューに対してすら、適用できます。
また、`CThemeManager` コンポーネントはもうありません。
その代りに、`theme``view` アプリケーションコンポーネントのコンフィギュレーション可能なプロパティになりました。
その代りに、`theme``view` アプリケーションコンポーネントの設定可能なプロパティになりました。
更なる詳細については [テーマ](output-theming.md) の節を参照してください。
細については [テーマ](output-theming.md) の節を参照してください。
コンソールアプリケーション
--------------------------
コンソールアプリケーションは、ウェブアプリケーションと同じように、コントローラとして組織されるようになりました。
1.1 における `CConsoleCommand` と同様に、コンソールコントローラは [[yii\console\Controller]] から派生させます。
1.1 における `CConsoleCommand` と同様に、コンソールコントローラは [[yii\console\Controller]] を拡張したものでなければなりません。
コンソールコマンドを走らせるためには、`yii <route>` という構文を使います。
ここで `<route>` はコントローラのルート(例えば `sitemap/index`)を意味します。
ここで `<route>` はコントローラのルート (例えば `sitemap/index`) を表します。
追加の無名の引数は、対応するコントローラのアクションメソッドに引数として渡されます。
一方、名前付きの引数は、[[yii\console\Controller::options()]] での宣言に従って解析されます。
Yii 2.0 はコメントブロックからコマンドのヘルプ情報を自動的に生成する機能をサポートしています。
更なる詳細については [コンソールコマンド](tutorial-console.md) の節を参照してください。
細については [コンソールコマンド](tutorial-console.md) の節を参照してください。
国際化
......@@ -292,17 +293,17 @@ Yii 2.0 縺ッ繧ウ繝。繝ウ繝医ヶ繝ュ繝け縺九i繧ウ繝槭Φ繝峨繝倥Ν繝玲ュ蝣ア繧定蜍
Yii 2.0 は [PECL intl PHP モジュール](http://pecl.php.net/package/intl) に賛同して、内蔵の日付フォーマッタと数字フォーマッタの部品を取り除きました。
メッセージは `i18n` アプリケーションコンポーネント経由で翻訳されるようになりました。
このコンポーネントはメッセージソースのセットを管理するもので、メッセージのカテゴリに基づいて異なるメッセージソースを使うことを許容します。
このコンポーネントは一連のメッセージソースを管理するもので、メッセージのカテゴリに基づいて異なるメッセージソースを使うことを許容するものです。
更なる詳細については [国際化](tutorial-i18n.md) の節を参照してください。
細については [国際化](tutorial-i18n.md) の節を参照してください。
アクションフィルタ
------------------
新しいアクションフィルターはビヘイビアによって実装されています。
新しいカスタムフィルターを定義するためには[[yii\base\ActionFilter]] を拡張します。
フィルターを使うためには、そのフィルタークラスをビヘイビアとしてコントローラにアタッチします。
新しいアクションフィルタはビヘイビアによって実装されています。
新しいカスタムフィルタを定義するためには、[[yii\base\ActionFilter]] を拡張します。
フィルタを使うためには、そのフィルタクラスをビヘイビアとしてコントローラにアタッチします。
例えば、[[yii\filters\AccessControl]] を使うためには、コントローラに次のコードを書くことになります:
```php
......@@ -319,7 +320,7 @@ public function behaviors()
}
```
更なる詳細については [フィルタ](structure-filters.md) の節を参照してください。
細については [フィルタ](structure-filters.md) の節を参照してください。
アセット
......@@ -329,16 +330,16 @@ Yii 2.0 縺ッ縲*繧「繧サ繝ヨ繝舌Φ繝峨Ν* 縺ィ蜻シ縺ー繧後k譁ー縺励>讎ょソオ繧貞ー主
アセットバンドルは、あるディレクトリの下に集められた一群のアセットファイル (例えば、JavaScript ファイル、CSS ファイル、イメージファイルなど) です。
それぞれのアセットバンドルは [[yii\web\AssetBundle]] を拡張したクラスとして表されます。
アセットバンドルを [[yii\web\AssetBundle::register()]] を通じて登録することによって、そのバンドルに含まれるアセットにウェブでアクセスできるようになります。
Yii 1 とは異なり、バンドルを登録したページは、そのバンドルで規定された JavaScript と CSS ファイルを自動的に参照するようになります。
アセットバンドルを [[yii\web\AssetBundle::register()]] を通じて登録することによって、そのバンドルに含まれるアセットにウェブ経由でアクセスできるようになります。
Yii 1 とは異なり、バンドルを登録したページは、そのバンドルで指定されている JavaScript と CSS ファイルへの参照を自動的に含むようになります。
更なる詳細については [アセットを管理する](structure-assets.md) の節を参照してください。
詳細については [アセット](structure-assets.md) の節を参照してください。
ヘルパー
--------
ヘルパ
------
Yii 2.0 はよく使われるスタティックなヘルパークラスを数多く導入しました。それには以下のものが含まれます;
Yii 2.0 はよく使われるスタティックなヘルパクラスを数多く導入しました。それには以下のものが含まれます。
* [[yii\helpers\Html]]
* [[yii\helpers\ArrayHelper]]
......@@ -346,37 +347,37 @@ Yii 2.0 縺ッ繧医¥菴ソ繧上l繧九せ繧ソ繝ぅ繝け縺ェ繝倥Ν繝代繧ッ繝ゥ繧ケ繧呈焚螟
* [[yii\helpers\FileHelper]]
* [[yii\helpers\Json]]
更なる詳細については [ヘルパー概要](helper-overview.md) の節を参照してください。
詳細については、ヘルパの [概要](helper-overview.md) の節を参照してください。
フォーム
--------
Yii 2.0 は [[yii\widgets\ActiveForm]] を使ってフォームを作成する際に *フィールド* の概念を導入しました。
Yii 2.0 は [[yii\widgets\ActiveForm]] を使ってフォームを作成する際に使用する *フィールド* の概念を導入しました。
フィールドは、ラベル、インプット、エラーメッセージ および/または ヒントテキストを含むコンテナです。
フィールドは [[yii\widgets\ActiveField|ActiveField]] のオブジェクトとして表現されます。
フィールドを使うことによって、以前よりも綺麗にフォームを作成することが出来るようになりました:
フィールドを使うことによって、以前よりもすっきりとフォームを作成することが出来るようになりました。
```php
<?php $form = yii\widgets\ActiveForm::begin(); ?>
<?= $form->field($model, 'username') ?>
<?= $form->field($model, 'password')->passwordInput() ?>
<div class="form-group">
<?= Html::submitButton('Login') ?>
<?= Html::submitButton('ログイン') ?>
</div>
<?php yii\widgets\ActiveForm::end(); ?>
```
更なる詳細については [フォームを作成する](input-forms.md) の節を参照してください。
細については [フォームを作成する](input-forms.md) の節を参照してください。
クエリビルダ
------------
1.1 においては、クエリビルダは `CDbCommand``CDbCriteria``CDbCommandBuilder` など、いくつかのクラスに散らばっていました。
1.1 においては、クエリの構築が `CDbCommand``CDbCriteria``CDbCommandBuilder` など、いくつかのクラスに散らばっていました。
Yii 2.0 は DB クエリを [[yii\db\Query|Query]] オブジェクトの形で表現します。
このオブジェクトが舞台裏で [[yii\db\QueryBuilder|QueryBuilder]] の助けを得て SQL 文に変換されます。
例えば:
例えば、
```php
$query = new \yii\db\Query();
......@@ -391,7 +392,7 @@ $rows = $command->queryAll();
何より良いのは、このようなクエリ構築メソッドが [アクティブレコード](db-active-record.md) を扱う時にも使える、ということです。
更なる詳細については [クエリビルダ](db-query-builder.md) の節を参照してください。
細については [クエリビルダ](db-query-builder.md) の節を参照してください。
アクティブレコード
......@@ -402,20 +403,20 @@ Yii 2.0 縺ッ [繧「繧ッ繝ぅ繝悶Ξ繧ウ繝シ繝云(db-active-record.md) 縺ォ謨ー螟壹¥縺ョ螟
1.1 の `CDbCriteria` クラスは Yii 2 では [[yii\db\ActiveQuery]] に置き換えられました。
このクラスは [[yii\db\Query]] を拡張したものであり、従って全てのクエリ構築メソッドを継承します。
以下のように、[[yii\db\ActiveRecord::find()]] を呼んでクエリの構築を開始します:
以下のように、[[yii\db\ActiveRecord::find()]] を呼んでクエリの構築を開始します。
```php
// 全てのアクティブな顧客を読み出し、ID によって並べる:
// 全てのアクティブな顧客を読み出し、ID によって並べる
$customers = Customer::find()
->where(['status' => $active])
->orderBy('id')
->all();
```
リレーションを宣言するためには、単純に [[yii\db\ActiveQuery|ActiveQuery]] オブジェクトを返すゲッターメソッドを定義します。
リレーションを宣言するために必要なことは、[[yii\db\ActiveQuery|ActiveQuery]] オブジェクトを返すゲッターメソッドを定義するだけのことです。
ゲッターによって定義されたプロパティの名前がリレーションの名前を表します。
例えば、以下のコードは `orders` リレーションを宣言するものです
(1.1 では `relations()` という一個の中枢でリレーションを宣言しなければなりませんでした):
(1.1 では `relations()` という一個の中枢でリレーションを宣言しなければなりませんでした)。
```php
class Customer extends \yii\db\ActiveRecord
......@@ -428,7 +429,7 @@ class Customer extends \yii\db\ActiveRecord
```
こうすることで、`$customer->orders` という構文によって関連テーブルにある顧客のオーダにアクセスすることが出来るようになります。
また、下記のコードを用いて、カスタマイズしたクエリ条件によるオンザフライのリレーショナルクエリを実行することも出来ます:
また、下記のコードを用いて、カスタマイズしたクエリ条件によるオンザフライのリレーショナルクエリを実行することも出来ます。
```php
$orders = $customer->getOrders()->andWhere('status=1')->all();
......@@ -436,19 +437,19 @@ $orders = $customer->getOrders()->andWhere('status=1')->all();
リレーションをイーガーロードするとき、Yii 2.0 は 1.1 とは異なる動きをします。
具体的に言うと、1.1 では JOIN クエリが生成されて、主レコードと関連レコードの両方がセレクトされていました。
Yii 2.0 では、JOIN を使わずに二つの SQL 文が実行されます:
一の SQL 文が主たるレコードを返し、第二の SQL 文は主レコードのプライマリキーを使うフィルタリングによって関連レコードを返します。
Yii 2.0 では、JOIN を使わずに二つの SQL 文が実行されます。
すなわち、第一の SQL 文が主たるレコードを返し、第二の SQL 文は主レコードのプライマリキーを使うフィルタリングによって関連レコードを返します。
多数のレコードを返すクエリを構築するときは、[[yii\db\ActiveRecord|ActiveRecord]] を返す代りに、[[yii\db\ActiveQuery::asArray()|asArray()]] メソッドをチェインして、クエリ結果を配列として返すことが出来ます。
こうすると、レコードの数が多い場合は、必要な CPU 時間とメモリを著しく削減することが出来ます。
例えば:
例えば、
```php
$customers = Customer::find()->asArray()->all();
```
もう一つの変更点は、属性のデフォルト値を public なプロパティによって定義することは出来なくなった、ということです。
デフォルト値が必要な場合は、アクティブレコードクラスの `init` メソッドの中で設定すべきです。
デフォルト値が必要な場合は、アクティブレコードクラスの `init` メソッドの中で設定しなければなりません。
```php
public function init()
......@@ -505,7 +506,7 @@ User 縺ィ 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 管理
......@@ -513,8 +514,8 @@ URL 邂。逅
Yii 2 の URL 管理は 1.1 のそれと似たようなものです。
主な機能強化は、URL 管理がオプションのパラメータをサポートするようになったことです。
例えば、下記のような規則を宣言した場合、`post/popular``post/1/popular` の両方にマッチするようになります。
1.1 では、これと同じ目的を達成するためには、二つの規則を使う必要がありました。
例えば、下記のような規則を宣言した場合に、`post/popular``post/1/popular` の両方に合致するようになります。
1.1 では、同じ目的を達成するためには、二つの規則を使う必要がありました。
```php
[
......@@ -524,12 +525,13 @@ Yii 2 縺ョ URL 邂。逅 1.1 縺ョ縺昴l縺ィ莨シ縺溘h縺↑繧ゅ縺ァ縺吶
]
```
更なる詳細については [URL 管理](runtime-url-handling.md) の節を参照してください。
詳細については [ルーティングと URL 生成](runtime-routing.md) の節を参照してください。
Yii 1.1 と 2.x を一緒に使う
---------------------------
Yii 2.0 と一緒に使いたい Yii 1.1 のレガシーコードを持っている場合は、
[Yii 1.1 と 2.x を一緒に使う](tutorial-yii-integration.md) の節を参照してください。
[サードパーティのコードを扱う](tutorial-yii-integration.md) の節の
[Yii 2 を Yii 1 と一緒に使う](tutorial-yii-integration.md#using-both-yii2-yii1) の項を参照してください。
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