Commit 454e4c81 by Qiang Xue

Merge pull request #6990 from softark/docs-guide-ja-start-refined

docs/guide-ja/start-* refined [ci skip]
parents 037ee2fd acf34f3f
......@@ -74,7 +74,7 @@ All Rights Reserved.
データベースの取り扱い
----------------------
* [データベースアクセスオブジェクト](db-dao.md): データベースへの接続、基本的なクエリ、トランザクション、および、スキーマ操作
* [データアクセスオブジェクト](db-dao.md): データベースへの接続、基本的なクエリ、トランザクション、および、スキーマ操作
* [クエリビルダ](db-query-builder.md): シンプルな抽象レイヤを使ってデータベースに対してクエリを行う
* [アクティブレコード](db-active-record.md): アクティブレコード ORM、レコードの読み出しと操作、リレーションの定義
* [マイグレーション](db-migrations.md): チーム開発環境においてデータベースにバージョンコントロールを適用
......
......@@ -15,10 +15,9 @@
具体的に言えば、DB クライアントツールを用いてデータベースを作成する方法と、SQL 文を実行する方法を知っていなければなりません。
データベースを準備する<a name="preparing-database"></a>
データベースを準備する <a name="preparing-database"></a>
----------------------
まず初めに、`yii2basic` という名前のデータベースを作成してください。このデータベースからアプリケーションにデータを読み出すことになります。
Yii は多数のデータベース製品に対するサポートを内蔵していますので、作成するデータベースは、SQLite、MySQL、PosttreSQL、MSSQL または Oracle から選ぶことが出来ます。
以下の説明では、話を単純にするために、MySQL を前提とします。
......@@ -48,14 +47,14 @@ INSERT INTO `country` VALUES ('US','United States',278357000);
この時点で、あなたは `yii2basic` という名前のデータベースを持ち、その中に三つのカラムを持つ `country` というテーブルがあり、`country` テーブルは 10 行のデータを持っている、ということになります。
DB 接続を構成する<a name="configuring-db-connection"></a>
DB 接続を構成する <a name="configuring-db-connection"></a>
-----------------
先に進む前に、[PDO](http://www.php.net/manual/en/book.pdo.php) PHP 拡張および使用しているデータベースの PDO ドライバ
(例えば、MySQL のための `pdo_mysql`) の両方をインストール済みであることを確認してください。
先に進む前に、[PDO](http://www.php.net/manual/en/book.pdo.php) PHP 拡張および使用しているデータベースの PDO ドライバ (例えば、MySQL のための `pdo_mysql`) の両方をインストール済みであることを確認してください。
アプリケーションがリレーショナルデータベースを使う場合、これは基本的な必要条件です。
これらがインストール済みなら、`config/db.php` というファイルを開いて、あなたのデータベースに適合するようにパラメータを変更してください。デフォルトでは、このファイルは下記の記述を含んでいます。
これらがインストール済みなら、`config/db.php` というファイルを開いて、あなたのデータベースに適合するようにパラメータを変更してください。
デフォルトでは、このファイルは下記の記述を含んでいます。
```php
<?php
......@@ -69,22 +68,20 @@ return [
];
```
この `config/db.php` というファイルは典型的なファイルベースの [構成情報](concept-configurations.md) のツールです。
この構成情報ファイルが [[yii\db\Connection]] インスタンスの作成と初期化に必要なパラメータを規定します。そして、
[[yii\db\Connection]] インスタンスを通じて、背後のデータベースに対する SQL クエリを実行することが出来るようになります。
この `config/db.php` というファイルは典型的なファイルベースの [構成情報](concept-configurations.md) ツールです。
この構成情報ファイルが、背後のデータベースに対する SQL クエリの実行を可能にする [[yii\db\Connection]] インスタンスの作成と初期化に必要なパラメータを指定するものです。
上記のようにして構成された DB 接続は、アプリケーションコードの中で `Yii::$app->db` という式でアクセスすることが出来ます。
> Info|情報: `config/db.php` は、メインのアプリケーション構成情報ファイルである `config/web.php` にインクルードされます。
この `config/web.php`[アプリケーション](structure-applications.md) インスタンスが初期化される仕方を規定します。
> Info|情報: `config/db.php` は、メインのアプリケーション構成情報ファイルである `config/web.php` によってインクルードされます。
この `config/web.php`[アプリケーション](structure-applications.md) インスタンスが初期化される仕方を指定するものです。
詳しい情報については、[構成情報](concept-configurations.md) の節を参照してください。
アクティブレコードを作成する<a name="creating-active-record"></a>
アクティブレコードを作成する <a name="creating-active-record"></a>
----------------------------
`country` テーブルの中のデータを表現し取得するために、[アクティブレコード](db-active-record.md) から派生した
`Country` という名前のクラスを作成し、それを `models/Country.php` というファイルに保存します。
`country` テーブルの中のデータを表現し取得するために、[アクティブレコード](db-active-record.md) から派生した `Country` という名前のクラスを作成し、それを `models/Country.php` というファイルに保存します。
```php
<?php
......@@ -127,10 +124,10 @@ $country->save();
もう一つの方法として、[データアクセスオブジェクト](db-dao.md) と呼ばれる、より低レベルなデータアクセス方法を使ってデータベースを操作することも出来ます。
アクションを作成する<a name="creating-action"></a>
アクションを作成する <a name="creating-action"></a>
--------------------
国データをエンドユーザに見えるようにするために、新しいアクションを作成する必要があります。
国データをエンドユーザに公開するために、新しいアクションを作成する必要があります。
これまでの節でしたように `site` コントローラの中に新しいアクションを置くのではなく、国データに関係する全てのアクションに限定した新しいコントローラを作成する方が理にかなうでしょう。
この新しいコントローラを `CountryController` と名付けます。そして、下記に示すように、`index` アクションをその中に作成します。
......@@ -178,10 +175,11 @@ class CountryController extends Controller
* クエリによって表現される SQL 文に `offset` 句と `limit` 句をセットして、一度に一ページ分のデータだけ (1ページ最大5行) を返すようにします。
* 次の項で説明されるように、一連のページボタンからなるページャをビューに表示するために使われます。
コードの最後で、`index` アクションは `index` と言う名前のビューをレンダリングしていますが、このとき、国データはもちろん、そのページ付け情報もビューに渡されます。
コードの最後で、`index` アクションは `index` と言う名前のビューをレンダリングしています。
このとき、国データだけでなく、そのページネーション情報がビューに渡されます。
ビューを作成する<a name="creating-view"></a>
ビューを作成する <a name="creating-view"></a>
----------------
最初に、`views` ディレクトリの下に `country` という名前のサブディレクトリを作ってください。
......@@ -208,11 +206,11 @@ use yii\widgets\LinkPager;
ビューは国データの表示に関連して二つの部分に分けられます。
最初の部分では、提供された国データがたどられて、HTML の順序無しリストとしてレンダリングされます。
第二の部分では、アクションから渡されたページ付け情報を使って、[[yii\widgets\LinkPager]] ウィジェットがレンダリングされます。
第二の部分では、アクションから渡されたページネーション情報を使って、[[yii\widgets\LinkPager]] ウィジェットがレンダリングされます。
`LinkPager` ウィジェットはページボタンのリストを表示します。ボタンのどれかをクリックすると、対応するページの国データが更新表示されます。
試してみる<a name="trying-it-out"></a>
試してみる <a name="trying-it-out"></a>
----------
上記のコード全てがどのように動作するかを見るために、ブラウザで下記の URL をアクセスします。
......@@ -244,7 +242,7 @@ http://hostname/index.php?r=country/index&page=2
こうして、新しい国のクエリは `LIMIT 5 OFFSET 5` という句を持ち、次の5つの国を表示のために返すことになります。
まとめ<a name="summary"></a>
まとめ <a name="summary"></a>
------
この節では、データベースを扱う方法を学びました。
......
......@@ -2,11 +2,10 @@
==============
この節では、ユーザからデータを取得するためのフォームを持つ新しいページを作る方法を説明します。
このページは名前の入力フィールドとメールの入力フィールドを持つフォームを表示します。
このページは名前のインプットフィールドとメールのインプットフィールドを持つフォームを表示します。
ユーザからこれら二つの情報を受け取った後、ページは入力された値を確認のためにエコーバックします。
この目的を達するために、一つの [アクション](structure-controllers.md) と 二つの [ビュー](structure-views.md) を作成する以外に、
一つの [モデル](structure-models.md) をも作成します。
この目的を達するために、一つの [アクション](structure-controllers.md) と 二つの [ビュー](structure-views.md) を作成する以外に、一つの [モデル](structure-models.md) をも作成します。
このチュートリアルを通じて、次の方法を学びます。
......@@ -15,7 +14,7 @@
* [ビュー](structure-views.md) の中で HTML フォームを構築する方法
モデルを作成する<a name="creating-model"></a>
モデルを作成する <a name="creating-model"></a>
----------------
ユーザに入力してもらうデータは、下に示されているように `EntryForm` モデルクラスとして表現され、`models/EntryForm.php` というファイルに保存されます。
......@@ -75,11 +74,11 @@ if ($model->validate()) {
```
アクションを作成する<a name="creating-action"></a>
アクションを作成する <a name="creating-action"></a>
--------------------
次に、この新しいモデルを使う `entry` アクションを `site` コントローラに作る必要があります。
アクションを作成して使うプロセスについては、すでに [「こんにちは」と言う](start-hello.md) の節で説明されました
アクションを作成して使うプロセスについては、[こんにちは、と言う](start-hello.md) の節で既に説明されています
```php
<?php
......@@ -112,30 +111,26 @@ class SiteController extends Controller
}
```
アクションは最初に `EntryForm` オブジェクトを生成します。そして、次に、モデルに `$_POST` のデータ、Yii においては [[yii\web\Request::post()]]
によって提供されるデータを投入しようと試みます。
モデルへのデータ投入が成功した場合(つまり、ユーザが HTML フォームを送信した場合)、アクションは[[yii\base\Model::validate()|validate()]]
を呼んで、入力された値が有効なものであることを確認します。
アクションは最初に `EntryForm` オブジェクトを生成します。
次に、モデルに `$_POST` のデータ、Yii においては [[yii\web\Request::post()]] によって提供されるデータを投入しようと試みます。
モデルへのデータ投入が成功した場合(つまり、ユーザが HTML フォームを送信した場合)、アクションは[[yii\base\Model::validate()|validate()]] を呼んで、入力された値が有効なものであるかどうかを確認します。
> Info|情報: `Yii::$app` という式は [アプリケーション](structure-applications.md) インスタンスを表現します。
これはグローバルにアクセス可能なシングルトンです。
これは、また、特定の機能性をサポートする `request``response``db` などのコンポーネントを提供する
[サービスロケータ](concept-service-locator.md) でもあります。
これは、また、特定の機能性をサポートする `request``response``db` などのコンポーネントを提供する [サービスロケータ](concept-service-locator.md) でもあります。
上記のコードでは、アプリケーションインスタンスの `request` コンポーネントが `$_POST` データにアクセスするために使われています。
すべてが適正である場合、アクションは `entry-confirm` という名前のビューを表示して、データの送信が成功したことをユーザに確認させます。
データが送信されなかったり、データがエラーを含んでいたりする場合は、`entry` ビューが表示され、その中で HTML フォームが
(もし有れば) 検証エラーのメッセージとともに表示されます。
データが送信されなかったり、データがエラーを含んでいたりする場合は、`entry` ビューが表示され、その中で HTML フォームが (もし有れば) 検証エラーのメッセージとともに表示されます。
> Note|注意: この簡単な例では、有効なデータ送信に対して単純に確認ページを表示しています。実際の仕事では、
[フォーム送信の諸問題](http://en.wikipedia.org/wiki/Post/Redirect/Get) を避けるために、
[[yii\web\Controller::refresh()|refresh()]] または [[yii\web\Controller::redirect()|redirect()]] を使うことを考慮すべきです。
> Note|注意: この簡単な例では、有効なデータ送信に対して単純に確認ページを表示しています。
実際の仕事では、[フォーム送信の諸問題](http://en.wikipedia.org/wiki/Post/Redirect/Get) を避けるために、[[yii\web\Controller::refresh()|refresh()]] または [[yii\web\Controller::redirect()|redirect()]] を使うことを考慮すべきです。
ビューを作成する<a name="creating-views"></a>
ビューを作成する <a name="creating-views"></a>
----------------
最後に、`entry-confirm``entry`う名前の二つのビューファイルを作成します。
最後に、`entry-confirm``entry`う名前の二つのビューファイルを作成します。
今まさに説明したように、これらが `entry` アクションによって表示されます。
`entry-confirm` ビューは単純に名前とメールのデータを表示するものです。このビューは `views/site/entry-confirm.php` というファイルに保存しなければなりません。
......@@ -174,12 +169,12 @@ use yii\widgets\ActiveForm;
このビューは HTML フォームを構築するのに、[[yii\widgets\ActiveForm|ActiveForm]] と呼ばれる強力な [ウィジェット](structure-widgets.md) を使います。
ウィジェットの `begin()` メソッドと `end()` メソッドが、それぞれ、フォームの開始タグと終了タグをレンダリングします。
この二つのメソッドの呼び出しの間に、[[yii\widgets\ActiveForm::field()|field()]] メソッドによって入力フィールドが作成されます。
最初の入力フィールドは "name" のデータ、第二の入力フィールドは "email" のデータのためのものです。
入力フィールドの後に、[[yii\helpers\Html::submitButton()]] メソッドが呼ばれて、送信ボタンを生成しています。
この二つのメソッドの呼び出しの間に、[[yii\widgets\ActiveForm::field()|field()]] メソッドによってインプットフィールドが作成されます。
最初のインプットフィールドは "name" のデータ、第二のインプットフィールドは "email" のデータのためのものです。
インプットフィールドの後に、[[yii\helpers\Html::submitButton()]] メソッドが呼ばれて、送信ボタンを生成しています。
試してみる<a name="trying-it-out"></a>
試してみる <a name="trying-it-out"></a>
----------
どのように動作するかを見るために、ブラウザで下記の URL をアクセスしてください。
......@@ -188,10 +183,9 @@ use yii\widgets\ActiveForm;
http://hostname/index.php?r=site/entry
```
二つの入力フィールドを持つフォームを表示するページが表示されるでしょう。
それぞれの入力フィールドの前には、どんなデータを入力すべきかを示すラベルがあります。
何も入力せずに、あるいは、無効なメールアドレスを入力して送信ボタンをクリックすると、
それぞれ問題のある入力フィールドの後ろにエラーメッセージが表示されます。
二つのインプットフィールドを持つフォームを表示するページが表示されるでしょう。
それぞれのインプットフィールドの前には、どんなデータを入力すべきかを示すラベルがあります。
何も入力せずに、あるいは、無効なメールアドレスを入力して送信ボタンをクリックすると、それぞれ問題のあるインプットフィールドの後ろにエラーメッセージが表示されます。
![検証エラーのあるフォーム](images/start-form-validation.png)
......@@ -203,17 +197,17 @@ http://hostname/index.php?r=site/entry
### 魔法の説明<a name="magic-explained"></a>
あなたは、舞台裏で HTML フォームがどのように動いているのか、不思議に思うかも知れません。
なぜなら、フォームが、ほとんど魔法のように、各入力フィールドのラベルを表示し、データを正しく入力しなかった場合には、ページをリロードすることなく、エラーメッセージを表示するからです。
なぜなら、フォームが、ほとんど魔法のように、各インプットフィールドのラベルを表示し、データを正しく入力しなかった場合には、ページをリロードすることなく、エラーメッセージを表示するからです。
そう、データの検証は、最初に JavaScript を使ってクライアントサイドで実行され、次に PHP によってサーバーサイドで実行されます。
そう、データの検証は、最初に JavaScript を使ってクライアント側で実行され、次に PHP によってサーバ側で実行されます。
[[yii\widgets\ActiveForm]] は、賢いことに、`EntryForm` で宣言した検証規則を抽出し、それを実行可能な JavaScript コードに変換して、JavaScript を使ってデータ検証を実行します。
ブラウザで JavaScript を無効にした場合でも、`actionEntry()` メソッドで示されているように、サーバーサイドでの検証は実行されます。
ブラウザで JavaScript を無効にした場合でも、`actionEntry()` メソッドで示されているように、サーバ側での検証は引き続き実行されます。
これにより、どのような状況であっても、データの有効性が保証されます。
> Warning|警告: クライアントサイドの検証は、ユーザにとってのより良い使い心地のために利便性を提供するものです。
クライアントサイドの検証の有無にかかわらず、サーバサードの検証は常に必要とされます。
> Warning|警告: クライアントの検証は、ユーザにとってのより良い使い心地のために利便性を提供するものです。
クライアント側の検証の有無にかかわらず、サーバ側の検証は常に必要とされます。
入力フィールドのラベルは、モデルのプロパティ名を使用して、`field()` メソッドによって生成されます。
インプットフィールドのラベルは、モデルのプロパティ名を使用して、`field()` メソッドによって生成されます。
例えば、`name` というプロパティから `Name` というラベルが生成されます。
ビューの中で、下記のコードのように、ラベルをカスタマイズすることも出来ます。
......@@ -228,7 +222,7 @@ http://hostname/index.php?r=site/entry
あなたは、将来のビュー開発を単純化するために、多くのビューコードを再利用可能なウィジェットに変換したいと思うことでしょう。
まとめ<a name="summary"></a>
まとめ <a name="summary"></a>
------
ガイドのこの節においては、MVC デザインパターンの全ての部分に触れました。
......
......@@ -12,7 +12,7 @@ Gii 繧剃スソ縺」縺ヲ繧ウ繝シ繝峨r閾ェ蜍慕函謌舌☆繧九%縺ィ縺ッ縲;ii 縺ョ繧ヲ繧ァ繝悶繝シ
* Gii によって生成されるコードをカスタマイズする方法
Gii を開始する<a name="starting-gii"></a>
Gii を開始する <a name="starting-gii"></a>
--------------
[Gii](tool-gii.md) は Yii の [モジュール](structure-modules.md) として提供されています。
......@@ -28,8 +28,7 @@ if (YII_ENV_DEV) {
}
```
上記の構成情報は、[開発環境](concept-configurations.md#environment-constants) において、アプリケーションは
`gii` という名前のモジュールをインクルードすべきこと、そして `gii`[[yii\gii\Module]] というクラスであることを記述しています。
上記の構成情報は、[開発環境](concept-configurations.md#environment-constants) において、アプリケーションは `gii` という名前のモジュールをインクルードすべきこと、そして `gii`[[yii\gii\Module]] というクラスであることを記述しています。
アプリケーションの [エントリスクリプト](structure-entry-scripts.md) である `web/index.php` をチェックすると、次の行があることに気付くでしょう。
これは本質的には `YII_ENV_DEV` を true に設定するものです。
......@@ -58,10 +57,11 @@ http://hostname/index.php?r=gii
![Gii](images/start-gii.png)
アクティブレコードのクラスを生成する<a name="generating-ar"></a>
アクティブレコードのクラスを生成する <a name="generating-ar"></a>
------------------------------------
Gii を使ってアクティブレコードのクラスを生成するためには、(Gii のインデックスページのリンクをクリックして) "Model Generator" を選びます。
Gii を使ってアクティブレコードのクラスを生成するためには、"Model Generator" を選びます
(Gii のインデックスページのリンクをクリックして下さい)。
そして、次のようにフォームに入力します。
* Table Name: `country`
......@@ -71,26 +71,25 @@ Gii 繧剃スソ縺」縺ヲ繧「繧ッ繝ぅ繝悶Ξ繧ウ繝シ繝峨繧ッ繝ゥ繧ケ繧堤函謌舌☆繧九◆繧√↓
次に、"Preview" ボタンをクリックします。
そうすると、結果として作成されるクラスファイルのリストに `models/Country.php` が挙ってきます。
クラスファイルの名前をクリックすると、内容をプレビュー出来ます。
クラスファイルの名前をクリックすると、内容をプレビューすることが出来ます。
Gii を使うときに、既に同じファイルを作成していて、それを上書きしようとしている場合は、ファイル名の隣の `diff`
ボタンをクリックして、生成されようとしているコードと既存のバージョンの違いを見てください。
Gii を使うときに、既に同じファイルを作成していて、それを上書きしようとしている場合は、ファイル名の隣の `diff` ボタンをクリックして、生成されようとしているコードと既存のバージョンの違いを見てください。
![Model Generator のプレビュー](images/start-gii-model-preview.png)
既存のファイルを上書きしようとしているときは、"overwrite" の隣のチェックボックスをチェックしてから "Generate" ボタンをクリックします。
新しいファイルを作成しようとしているときは、単に "Generate" を押せば大丈夫です。
既存のファイルを上書きするときは、"overwrite" の隣のチェックボックスをチェックしてから "Generate" ボタンをクリックします。
新しいファイルを作成するときは、単に "Generate" をクリックすれば十分です。
次に、コードの生成が成功したことを示す確認ページが表示されます。
既存のファイルがあった場合は、それが新しく生成されたコードで上書きされたことを示すメッセージも同じく表示されます。
CRUD コードを生成する<a name="generating-crud"></a>
CRUD コードを生成する <a name="generating-crud"></a>
---------------------
CRUD は Create(作成)、Read(読出し)、Update(更新)、そして Delete(削除) を意味しており、ほとんどのウェブサイトでデータを扱うときによく用いられる4つのタスクを表しています。
Gii を使って CRUD 機能を作成するためには、(Gii のインデックスページのリンクをクリックして) "CRUD Generator" を選びます。
「国リスト」のサンプルのためには、以下のようにフォームに入力します。
Gii を使って CRUD 機能を作成するためには、"CRUD Generator" を選びます (Gii のインデックスページのリンクをクリックしてください) 。
「国リスト」のサンプルのためには、表示されたフォームに以下のように入力します。
* Model Class: `app\models\Country`
* Search Model Class: `app\models\CountrySearch`
......@@ -103,11 +102,11 @@ Gii 繧剃スソ縺」縺ヲ CRUD 讖溯繧剃ス懈縺吶k縺溘a縺ォ縺ッ縲(Gii 縺ョ繧、繝ウ繝ャ繧
![CRUD Generator のプレビュー](images/start-gii-crud-preview.png)
以前に(ガイドのデータベースの節で)`controllers/CountryController.php``views/country/index.php` のファイルを作成していた場合は、それらを置き換えるために
"overwrite" のチェックボックスをチェックしてください。(以前のバージョンは フル機能の CRUD をサポートしていません。)
以前に(ガイドのデータベースの節で)`controllers/CountryController.php``views/country/index.php` のファイルを作成していた場合は、それらを置き換えるために "overwrite" のチェックボックスをチェックしてください。
(以前のバージョンは フル機能の CRUD をサポートしていません。)
試してみる<a name="trying-it-out"></a>
試してみる <a name="trying-it-out"></a>
----------
どのように動作するかを見るために、ブラウザを使って下記の URL にアクセスしてください。
......@@ -130,7 +129,7 @@ http://hostname/index.php?r=country/index
これらの機能がどのように実装されているかを調査したい場合、また、これらの機能をカスタマイズしたいときに参照してください。
* Controller: `controllers/CountryController.php`
* Models: `models/Country.php` and `models/CountrySearch.php`
* Models: `models/Country.php` `models/CountrySearch.php`
* Views: `views/country/*.php`
> Info|情報: Gii は非常にカスタマイズしやすく拡張しやすいコード生成ツールとして設計されています。
......@@ -138,7 +137,7 @@ http://hostname/index.php?r=country/index
詳細については、[Gii](tool-gii.md) の節を参照してください。
まとめ<a name="summary"></a>
まとめ <a name="summary"></a>
------
この節では、Gii を使ってコードを生成して、データベーステーブルに保存されているコンテンツのための完全な CRUD 機能を実装する方法を学びました。
この節では、Gii を使ってコードを生成して、データベーステーブルに保存されているコンテントのための完全な CRUD 機能を実装する法を学びました。
「こんにちは」と言う
====================
こんにちは、と言う
==================
この節では、アプリケーションに「こんにちは」という新しいページを作成する方法を説明します。
この目的を達するために、[アクション](structure-controllers.md#creating-actions)[ビュー](structure-views.md) を作成することになります。
この目的を達するために、[アクション](structure-controllers.md#creating-actions)[ビュー](structure-views.md) を作成ます。
* アプリケーションがこのページへのリクエストをそのアクションに送付し、
* 次にそのアクションが "Hello" という言葉をエンドユーザに示すビューを表示します。
* アプリケーションは、このページへのリクエストをそのアクションに送付します。
* 次にそのアクションが「こんにちは」という言葉をエンドユーザに示すビューを表示します。
このチュートリアルを通じて、三つのことを学びます。
1. リクエストに応える [アクション](structure-controllers.md) を作成する方法
2. レスポンスの内容を構成する [ビュー](structure-views.md) を作成する方法
2. レスポンスのコンテントを作成する [ビュー](structure-views.md) を作成する方法
3. アプリケーションがリクエストを [アクション](structure-controllers.md#creating-actions) に送付する仕組み
アクションを作成する<a name="creating-action"></a>
アクションを作成する <a name="creating-action"></a>
--------------------
「こんにちは」のタスクのために、`message` パラメータをリクエストから読んで、そのメッセージをユーザに表示して返す `say` [アクション](structure-controllers.md#creating-actions) を作ります。
リクエストが `message` パラメータを提供しない場合は、アクションは既定値として "Hello" というメッセージを表示するものとします。
「こんにちは」のタスクのために、リクエストから `message` パラメータを読んで、そのメッセージをユーザに表示して返す `say` [アクション](structure-controllers.md#creating-actions) を作ります。
リクエストが `message` パラメータを提供しなかった場合は、アクションはデフォルト値として "こんにちは" というメッセージを表示するものとします。
> Info|情報: [アクション](structure-controllers.md#creating-actions) は、エンドユーザが直接に参照して実行できるオブジェクトです。
アクションは [コントローラ](structure-controllers.md) によってグループ化されます。
......@@ -27,7 +27,7 @@
アクションは [コントローラ](structure-controllers.md) の中で宣言されなければなりません。
話を簡単にするために、`say` アクションを既存の `SiteController` の中で宣言しましょう。
このコントローラは `controllers/SiteController.php` というクラスファイルの中で定義されています。
次のようにして、新しいアクションを書き始めます。
次のようにして、新しいアクションが始まります。
```php
<?php
......@@ -40,7 +40,7 @@ class SiteController extends Controller
{
// ... 既存のコード ...
public function actionSay($message = 'Hello')
public function actionSay($message = 'こんにちは')
{
return $this->render('say', ['message' => $message]);
}
......@@ -51,29 +51,28 @@ class SiteController extends Controller
Yii はコントローラクラスの中で、アクションのメソッドとアクションでないメソッドを区別するために、`action` という接頭辞を使います。
`action` という接頭辞の後に続く名前がアクション ID にマップされます。
アクションを命名するについては、Yii がアクション ID をどのように取り扱うかを知っているべきです
アクションを命名するについては、Yii がアクション ID をどのように取り扱うかを知っていなければなりません
アクション ID は常に小文字で参照されます。
アクション ID が複数の単語を必要とするときは、単語がダッシュ(-)で連結されます (例えば、`create-comment`)。
アクションメソッドの名前は、アクション ID からダッシュを全て削除し、各単語の先頭の文字を大文字にした結果に `action` という接頭辞を付けたものとします。
アクション ID が複数の単語を必要とするときは、単語がダッシュ (-) で連結されます (例えば、`create-comment`)。
アクションメソッドの名前は、アクション ID からダッシュを全て削除し、各単語の先頭の文字を大文字にした結果に `action` という接頭辞を付けたものになります。
例えば、アクション ID `create-comment` に対応するアクションメソッド名は `actionCreateComment` となります。
私たちの例では、このアクションメソッドは `"Hello"` という既定値をもつ `$message` というパラメータを取ります
(PHP で関数やメソッドの引数に既定値をセットするのと全く同じ方法です)。
アプリケーションは、リクエストを受け取ったとき、当該リクエストの処理を `say` アクションが担当すべきであると決定した場合は、
リクエストの中に同じ名前の付いたパラメータがあれば、その値をこのパラメータに代入します。
言い換えれば、もしリクエストに `"GoodBye"` という値の `message` パラメータが入っていれば、アクションの `$message` 変数にその値が割り当てられます。
私たちの例では、アクションメソッドは `$message` というパラメータを取り、そのデフォルト値は `"こんにちは"` です
(PHP で関数やメソッドの引数にデフォルト値を設定するのと全く同じ方法です)。
アプリケーションがリクエストを受け取って、当該リクエストの処理を `say` アクションが担当すべきであると決定した場合は、リクエストの中に見つかった同じ名前のパラメータの値をこの `$message` パラメータに代入します。
言い換えれば、もしリクエストの中に `"さようなら"` という値の `message` パラメータが入っていれば、アクションの `$message` 変数にその値が割り当てられます。
このアクションメソッドの中では、[[yii\web\Controller::render()|render()]] が呼ばれて `say` と言う名前の [ビュー](structure-views.md) ファイルがレンダリングされます。
アクションメソッドの中では、[[yii\web\Controller::render()|render()]] が呼ばれて `say` と言う名前の [ビュー](structure-views.md) ファイルがレンダリングされます。
`message` パラメータも同時にビューに渡され、そこで使用されます。
レンダリング結果はアクションメソッドによって返されます。
返された結果はアプリケーションによって受け取られ、ブラウザ上でエンドユーザに (完全な HTML ページの一部として) 表示されます。
ビューを作成する<a name="creating-view"></a>
ビューを作成する <a name="creating-view"></a>
----------------
[ビュー](structure-views.md) は、レスポンスのコンテンツを生成するためにあなたが書くスクリプトです。
「こんにちは」のタスクのためには、アクションメソッドから受け取った `message` パラメータを印字する `say` ビューを作成します:
[ビュー](structure-views.md) は、レスポンスのコンテントを生成するために書かれるスクリプトです。
「こんにちは」のタスクのためには、アクションメソッドから受け取った `message` パラメータを出力する `say` ビューを作成します。
```php
<?php
......@@ -83,19 +82,19 @@ use yii\helpers\Html;
```
`say` ビューは `views/site/say.php` というファイルに保存しなければなりません。
アクションの中で [[yii\web\Controller::render()|render()]] メソッドが呼ばれるとき、このメソッドは `views/ControllerID/ViewName.php` という名前の PHP ファイルを探します。
アクションの中で [[yii\web\Controller::render()|render()]] メソッドが呼ばれるとき、`render()` メソッドは `views/ControllerID/ViewName.php` という名前の PHP ファイルを探します。
上記のコードでは、`message` パラメータが印字される前に [[yii\helpers\Html::encode()|HTML-エンコード]] されていることに注意してください。
パラメータはエンドユーザから来るものであり、悪意のある JavaScript コードを埋め込まれて [クロスサイトスクリプティング (XSS) 攻撃](http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%82%B9%E3%82%B5%E3%82%A4%E3%83%88%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0) に使われうるものですから、脆弱性を防止するためにこれは必要な措置です。
上記のコードで `message` パラメータが出力される前に [[yii\helpers\Html::encode()|HTML-エンコード]] されていることに注意してください。
パラメータはエンドユーザから来るものであり、悪意のある JavaScript コードを埋め込まれて [クロスサイトスクリプティング (XSS) 攻撃](http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%82%B9%E3%82%B5%E3%82%A4%E3%83%88%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0) に使われうるものですから、脆弱性を防止するためにこうすることが必要です。
当然ながら、`say` ビューにはもっと多くのコンテンを入れても構いません。
コンテンには、HTML タグ、平文テキスト、さらには PHP 文を含めることが出来ます。
当然ながら、`say` ビューにはもっと多くのコンテンを入れても構いません。
コンテンには、HTML タグ、平文テキスト、さらには PHP 文を含めることが出来ます。
実際、`say` ビューは [[yii\web\Controller::render()|render()]] メソッドによって実行される PHP スクリプトであるに過ぎません。
ビュースクリプトによって描画されたコンテンツはレスポンス結果としてアプリケーションに返されます。
ビュースクリプトによって出力されたコンテントはレスポンス結果としてアプリケーションに返されます。
そしてアプリケーションがこの結果をエンドユーザに対して出力します。
試してみる<a name="trying-it-out"></a>
試してみる <a name="trying-it-out"></a>
----------
アクションとビューを作成したら、下記の URL で新しいページにアクセスすることが出来ます。
......@@ -107,16 +106,16 @@ http://hostname/index.php?r=site/say&message=Hello+World
![Hello World](images/start-hello-world.png)
この URL は、結果として、"Hello World" を表示するページになります。
このページはアプリケーションの他のページと同じヘッダとフッタを共有します。
このページはアプリケーションの他のページと同じヘッダとフッタを共有しています。
URL から `message` パラメータを省略すると、"Hello" だけを表示するページを見ることになるでしょう。
これは、`message``actionSay()` メソッドにパラメータとして渡されるものであり、それが省略された場合には、既定値である `"Hello"` が代りに使われるからです。
URL から `message` パラメータを省略すると、"こんにちは" を表示するページを見ることになるでしょう。
これは、`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` にあります。
上記の URL の `r` パラメータについて、さらに説明が必要でしょう。
これは [ルート](runtime-routing.md)、すなわち、特定のアクションを指し示すアプリケーション全体で一意な ID を表します。
上記の URL の `r` パラメータについて、さらに説明が必要でしょう。
これは [ルート](runtime-routing.md)、すなわち、アクションを指し示すアプリケーションを通じて一意な ID を表します。
ルートの書式は `ControllerID/ActionID` です。
アプリケーションはリクエストを受け取ると、このパラメータ `r` をチェックし、`ControllerID` の部分を使って、このリクエストを処理するためにどのコントローラクラスのインスタンスを作成すべきかを決定します。
そして、コントローラは `ActionID` の部分を使って、実際の仕事をするためにどのアクションを呼び出すべきかを決定します。
......@@ -126,18 +125,18 @@ URL から `message` パラメータを省略すると、"Hello" だけを表示
> Info|情報: アクションと同じく、コントローラもまたアプリケーションの中で一意に定義される ID を持ちます。
コントローラ ID も、アクション ID と同じ命名規則を使います。
コントローラクラスの名前は、コントローラ ID からダッシュを削除し、各単語の最初の文字を大文字にし、結果として出来る文字列に `Controller` という接尾辞を追加したものとます。
コントローラクラスの名前は、コントローラ ID からダッシュを削除し、各単語の最初の文字を大文字にし、結果として出来る文字列に `Controller` という接尾辞を追加したものとなります。
例えば、`post-comment` というコントローラ ID に対応するコントローラクラスの名前は `PostCommentController` です。
まとめ<a name="summary"></a>
まとめ <a name="summary"></a>
------
この節では、MVC デザインパターンのうちのコントローラとビューの部分に触れました。
特定のリクエストを処理するためのアクションをコントローラの一部として作成しました。
また、レスポンスのコンテンツを構成するためにビューも作成しました。
この単純な例においては、使用される唯一のデータが `message` パラメータであったため、モデルは関係してきませんでした
また、レスポンスのコンテントを作成するためのビューも作成しました。
この単純な例においては、使用される唯一のデータが `message` パラメータであったため、モデルは関係していません
また、Yii におけるルートについても学びました。ルートはユーザのリクエストとコントローラのアクションとの橋渡しとして働くものです。
次の節では、モデルを作成する方法を学びそして、HTML フォームを含むページを追加します。
次の節では、モデルを作成する方法を学びます。そして、HTML フォームを含むページを追加します。
Yii をインストールする
======================
Yii は二つの方法でインストールできます。[Composer](http://getcomposer.org/) を使う方法とアーカイブファイルをダウンロードする方法です。
前者がお薦めの方法です。と言うのは、一つのコマンドを走らせるだけで、新しい[エクステンション](structure-extensions.md) をインストールしたり、Yii をアップデートしたり出来るからです。
Yii は二つの方法でインストールすることが出来ます。すなわち、[Composer](http://getcomposer.org/) を使うか、アーカイブファイルをダウンロードするかです。
前者がお薦めの方法です。と言うのは、一つのコマンドを走らせるだけで、新しい [エクステンション](structure-extensions.md) をインストールしたり、Yii をアップデートしたりすることが出来るからです。
Yii の標準的なインストールを実行すると、フレームワークとアプリケーションテンプレートの両方がダウンロードされてインストールされます。
アプリケーションテンプレートは、いくつかの基本的な機能、例えば、ログインやコンタクトフォームなどを実装した、動作する Yii アプリケーションです。
そのコードは推奨される方式に従って組織されています。
そのため、アプリケーションテンプレートは、あなたのプロジェクトのための好ましい開始点としての役割を果たしうるものです。
そのコードは推奨される方法に従って組織されています。
そのため、アプリケーションテンプレートは、あなたのプロジェクトのための良い開始点としての役割を果たしうるものです。
この節と後続のいくつかの節においては、いわゆる *ベーシックアプリケーションテンプレート* とともに Yii をインストールする方法、および、このテンプレート上に新しい機能を実装する方法を説明します。
Yii は [アドバンストアプリケーションテンプレート](tutorial-advanced-app.md) と呼ばれるもう一つのテンプレートも提供しています。
Yii はもう一つ、[アドバンストアプリケーションテンプレート](tutorial-advanced-app.md) と呼ばれるテンプレートも提供しています。
こちらは、チーム開発環境において多層構造のアプリケーションを開発するときに使用する方が望ましいものです。
> Info|情報: ベーシックアプリケーションテンプレートは、ウェブアプリケーションの 90 パーセントを開発するのに適したものです。
アドバンストアプリケーションテンプレートとの主な違いは、コードがどのように組織されているかという点にあります。
あなたが Yii は初めてだという場合は、シンプルでありながら十分な機能を持っていることを理由にして、ベーシックアプリケーションテンプレートに留まることを強く推奨します。
あなたが Yii は初めてだという場合は、シンプルでありながら十分な機能を持っているベーシックアプリケーションテンプレートに留まることを強く推奨します。
Composer によるインストール<a name="installing-via-composer"></a>
Composer によるインストール <a name="installing-via-composer"></a>
---------------------------
まだ Composer をインストールしていない場合は、[getcomposer.org](https://getcomposer.org/download/) の指示に従ってインストールすることが出来ます。
Linux や Mac OS X では、次のコマンドを実行してください:
Linux や Mac OS X では、次のコマンドを実行します。
curl -s http://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
Windows では、[Composer-Setup.exe](https://getcomposer.org/Composer-Setup.exe) をダウンロードして実行してください。
Windows では、[Composer-Setup.exe](https://getcomposer.org/Composer-Setup.exe) をダウンロードして実行します。
何か問題が生じたときや、Composer の使い方に関してもっと学習したいときは、[Composer Documentation](https://getcomposer.org/doc/) を参照してください。
何か問題が生じたときや、Composer の使い方に関してもっと学習したいときは、[Composer ドキュメント](https://getcomposer.org/doc/) を参照してください。
以前に Composer をインストールしたことがある場合は、確実に最新のバージョンを使うようにしてください。
Composer は `composer self-update` コマンドを走らせてアップデートすることが出来ます。
Composer は `composer self-update` コマンドを実行してアップデートすることが出来ます。
Composer がインストールされたら、ウェブからアクセスできるフォルダで下記のコマンドを実行することによって Yii をインストールすることが出来ます:
Composer がインストールされたら、ウェブからアクセスできるフォルダで下記のコマンドを実行することによって Yii をインストールすることが出来ます。
composer global require "fxp/composer-asset-plugin:1.0.0-beta4"
composer create-project --prefer-dist yiisoft/yii2-app-basic basic
最初のコマンドは [composer asset plugin](https://github.com/francoispluchino/composer-asset-plugin/) をインストールします。
最初のコマンドは [composer アセットプラグイン](https://github.com/francoispluchino/composer-asset-plugin/) をインストールします。
これにより、Composer を通じて bower と npm の依存パッケージを管理することが出来るようになります。
このコマンドは全体で一度だけ走らせれば十分です。
このコマンドは一度だけ実行すれば十分です
第二のコマンドは `basic` という名前のディレクトリに Yii をインストールします。
必要なら別のディレクトリ名を選ぶことも出来ます。
......@@ -56,14 +56,14 @@ Composer 縺後う繝ウ繧ケ繝医繝ォ縺輔l縺溘i縲√え繧ァ繝悶°繧峨い繧ッ繧サ繧ケ縺ァ縺阪
> 開発バージョンは動いているあなたのコードを動かなくするかもしれませんので、本番環境では使うべきでないことに注意してください。
アーカイブファイルからインストールする<a name="installing-from-archive-file"></a>
アーカイブファイルからインストールする <a name="installing-from-archive-file"></a>
--------------------------------------
アーカイブファイルから Yii をインストールするには、三つのステップを踏みます。
アーカイブファイルから Yii をインストールするには、三つの手順を踏みます。
1. [yiiframework.com](http://www.yiiframework.com/download/) からアーカイブファイルをダウンロードする。
2. ダウンロードしたファイルをウェブからアクセスできるフォルダーに展開する。
3. `config/web.php` ファイルを編集して、`cookieValidationKey` というコンフィギュレーション項目に秘密キーを入力する
3. `config/web.php` ファイルを編集して、`cookieValidationKey` という構成情報の項目に秘密キーを入力する
(Composer を使って Yii をインストールするときは、これは自動的に実行されます)。
```php
......@@ -72,10 +72,10 @@ Composer 縺後う繝ウ繧ケ繝医繝ォ縺輔l縺溘i縲√え繧ァ繝悶°繧峨い繧ッ繧サ繧ケ縺ァ縺阪
```
他のインストールオプション<a name="other-installation-options"></a>
他のインストールオプション <a name="other-installation-options"></a>
--------------------------
上記のインストール方法の説明は Yii のインストールの仕方を示すものですがそれは同時にそのままで動作する基本的なウェブアプリケーションを作成するものでもあります
上記のインストール方法の説明は Yii のインストールの仕方を示すものですがそれは同時に直ちに動作する基本的なウェブアプリケーションを作成するものでもあります
これは規模の大小に関わらずほとんどのプロジェクトを開始するのに良い方法です
特にYii の学習を始めたばかりの場合にはこの方法が適しています
......@@ -87,26 +87,26 @@ Composer 縺後う繝ウ繧ケ繝医繝ォ縺輔l縺溘i縲√え繧ァ繝悶°繧峨い繧ッ繧サ繧ケ縺ァ縺阪
をインストールすることを考慮することが出来ます
インストールを検証する<a name="verifying-installation"></a>
インストールを検証する <a name="verifying-installation"></a>
----------------------
インストール完了後ブラウザで下記の URL によってインストールされた Yii アプリケーションにアクセスすることが出来ます
インストール完了後インストールされた Yii アプリケーションにブラウザを使って下記の URL でアクセスすることが出来ます
```
http://localhost/basic/web/index.php
```
この URL は、あなたが Yii を ウェブサーバのドキュメントルートディレクトリの下の `basic` という名前のディレクトリにインストールしたこと、
この URL は、あなたが Yii を ウェブサーバのドキュメントルートディレクトリ直下の `basic` という名前のディレクトリにインストールしたこと、
そして、ウェブサーバがローカルマシン (`localhost`) で走っていることを想定しています。
インストールされた環境に合うように URL を変更してください。
あなたのインストールの環境に合うように URL を変更する必要があるかもしれません。
![Yii のインストールが成功](images/start-app-installed.png)
ブラウザに上のような "おめでとう!" のページが表示されるはずです。
もし表示されなかったら、PHP のインストールが Yii の必要条件を満たしているかどうか、チェックしてください。
最低限の必要条件を満たしているかどうかは、次の方法のどちらかによってチェックすることが出来ます:
最低限の必要条件を満たしているかどうかは、次の方法のどちらかによってチェックすることが出来ます。
* ブラウザを使って `http://localhost/basic/requirements.php` という URL にアクセスする
* ブラウザを使って URL `http://localhost/basic/requirements.php` にアクセスする。
* 次のコマンドを実行する。
```
......@@ -116,35 +116,31 @@ http://localhost/basic/web/index.php
Yii の最低必要条件を満たすように PHP のインストールを構成しなければなりません。
最も重要なことは、PHP 5.4 以上でなければならないということです。
また、アプリケーションがデータベースを必要とする場合は、[PDO PHP 拡張](http://www.php.net/manual/ja/pdo.installation.php) および対応するデータベースドライバ
(MySQL データベースのための `pdo_mysql` など) をインストールしなければなりません。
また、アプリケーションがデータベースを必要とする場合は、[PDO PHP 拡張](http://www.php.net/manual/ja/pdo.installation.php) および対応するデータベースドライバ (MySQL データベースのための `pdo_mysql` など) をインストールしなければなりません。
ウェブサーバを構成する<a name="configuring-web-servers"></a>
ウェブサーバを構成する <a name="configuring-web-servers"></a>
----------------------
> Info|情報: もし Yii の試運転をしているだけで、本番サーバに配置する意図がないのであれば、当面、この項は飛ばしても構いません。
> Info|情報: もし Yii の試運転をしているだけで、本番サーバに配備する意図がないのであれば、当面、この項は飛ばしても構いません。
上記の説明に従ってインストールされたアプリケーションは、[Apache HTTP サーバ](http://httpd.apache.org/) と [Nginx HTTP サーバ](http://nginx.org/) のどちらでも、
また、Windows、Mac OS X、Linux のどれでも、PHP 5.4 以上を走らせている環境であれば、そのままの状態で動作するはずです。
上記の説明に従ってインストールされたアプリケーションは、[Apache HTTP サーバ](http://httpd.apache.org/) と [Nginx HTTP サーバ](http://nginx.org/) のどちらでも、また、Windows、Mac OS X、Linux のどれでも、PHP 5.4 以上を走らせている環境であれば、そのままの状態で動作するはずです。
Yii 2.0 は、また、facebook の [HHVM](http://hhvm.com/) とも互換性があります。
ただし HHVM がネイティブの PHP とは異なる振舞いをする特殊なケースもいくつかありますので、HHVM を使うときはいくらか余分に注意を払う必要があります。
本番用のサーバでは、`http://www.example.com/basic/web/index.php` の代りに `http://www.example.com/index.php` という URL
でアプリケーションにアクセス出来るようにウェブサーバを設定したいと思うかもしれません。
本番用のサーバでは、`http://www.example.com/basic/web/index.php` の代りに `http://www.example.com/index.php` という URL でアプリケーションにアクセス出来るようにウェブサーバを設定したいでしょう。
そういう設定をするためには、ウェブサーバのドキュメントルートを `basic/web` フォルダに向けることが必要になります。
また、[ルーティングと URL 生成](runtime-routing.md) の節で述べられているように、URL から `index.php` を隠したいと思うかも知れません。
また、[ルーティングと URL 生成](runtime-routing.md) の節で述べられているように、URL から `index.php` を隠したいとも思うでしょう。
この節では、これらの目的を達するために Apache または Nginx サーバをどのように設定すれば良いかを学びます。
> Info|情報: `basic/web` をドキュメントルートに設定することは、`basic/web` の兄弟ディレクトリに保管されたプライベートなアプリケーションコードや取り扱いに注意を要するデータファイルにエンドユーザがアクセスすることを防止することにもなります。
これらの他のフォルダに対するアクセスを拒否することはセキュリティ強化の一つです。
> Info|情報: `basic/web` をドキュメントルートに設定することは、`basic/web` の兄弟ディレクトリに保存されたプライベートなアプリケーションコードや公開できないデータファイルにエンドユーザがアクセスすることを防止することにもなります。
`basic/web` 以外のフォルダに対するアクセスを拒否することはセキュリティ強化の一つです。
> Info|情報: ウェブサーバの設定を修正する権限のない共用ホスティング環境でアプリケーションが走る場合でも、
セキュリティ強化のためにアプリケーションの構造を調整することが出来ます。
> Info|情報: あなたがウェブサーバの設定を修正する権限を持たない共用ホスティング環境でアプリケーションが走る場合であっても、セキュリティ強化のためにアプリケーションの構造を調整することがまだ出来ます。
詳細については、[共有ホスティング環境](tutorial-shared-hosting.md) の節を参照してください。
### 推奨される Apache の構成<a name="recommended-apache-configuration"></a>
### 推奨される Apache の構成 <a name="recommended-apache-configuration"></a>
下記の設定を Apache の `httpd.conf` ファイルまたはバーチャルホスト設定の中で使います。
`path/to/basic/web` の部分を `basic/web` の実際のパスに置き換えなければならないことに注意してください。
......@@ -156,10 +152,10 @@ DocumentRoot "path/to/basic/web"
<Directory "path/to/basic/web">
# 綺麗な URL をサポートするために mod_rewrite を使う
RewriteEngine on
# ディレクトリかファイルが存在する場合は、リクエストを直接使う
# ディレクトリかファイルが存在する場合は、リクエストをそのまま通す
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# そうでなければ、リクエストを index.php に回送する
# そうでなければ、リクエストを index.php に送付する
RewriteRule . index.php
# ... 他の設定 ...
......@@ -167,11 +163,11 @@ DocumentRoot "path/to/basic/web"
```
### 推奨される Nginx の構成<a name="recommended-nginx-configuration"></a>
### 推奨される Nginx の構成 <a name="recommended-nginx-configuration"></a>
[Nginx](http://wiki.nginx.org/) を使うためには、PHP を [FPM SAPI](http://jp1.php.net/install.fpm) としてインストールしていなければなりません
下記の設定を使うことができます (`path/to/basic/web` の部分を `basic/web` の実際のパスに置き換え、`mysite.local`
を実際のサーバのホスト名に置き換えてください)。
[Nginx](http://wiki.nginx.org/) を使うためには、PHP を [FPM SAPI](http://jp1.php.net/install.fpm) としてインストールしなければなりません。
下記の Nginx の設定を使うことができます。
`path/to/basic/web` の部分を `basic/web` の実際のパスに置き換え、`mysite.local` を実際のサーバのホスト名に置き換えてください。
```
server {
......@@ -193,8 +189,7 @@ server {
try_files $uri $uri/ /index.php?$args;
}
# 存在しないスタティックファイルの呼び出しを Yii が処理するのを
# 防止したい場合は、コメントを外すこと
# 存在しない静的ファイルの呼び出しを Yii に処理させたくない場合はコメントを外す
#location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
# try_files $uri =404;
#}
......@@ -213,7 +208,6 @@ server {
}
```
この構成を使う場合は、同時に `php.ini` ファイルで `cgi.fix_pathinfo=0` も設定して、多数の不要な `stat()` の呼び出しを避けるべきです。
この構成を使う場合は、多数の不要な `stat()` システムコールを避けるために、`php.ini` ファイルで `cgi.fix_pathinfo=0` を同時に設定しておくべきです。
また、HTTPS サーバを走らせている場合には、安全な接続であることを Yii が正しく検知できるように、`fastcgi_param HTTPS on;`
を追加しなければならないことにも注意を払ってください。
また、HTTPS サーバを走らせている場合には、安全な接続であることを Yii が正しく検知できるように、`fastcgi_param HTTPS on;` を追加しなければならないことにも注意を払ってください。
この先を見通す
==============
先を見通す
==========
「はじめよう」の章全体を読み通したなら、いまやあなたは、完全な Yii のアプリケーションを作成したことがある、と言うことが出来ます。
その過程で、あなたは HTML フォームを通じてユーザからデータを取得することや、データベースからデータを取得すること、また、ページ付けをしてデータを表示することなど、必要とされることが多いいくつかの機能を実装する方法を学びました。
「はじめよう」の章全体を読み通したなら、いまやあなたは、完全な Yii のアプリケーションを作成したことがある、ということになります。
その過程で、あなたは必要とされることが多いいくつかの機能、例えば、HTML フォームを通じてユーザからデータを取得することや、データベースからデータを取得すること、また、ページ付けをしてデータを表示することなどを実装する方法を学びました。
また、[Gii](tool-gii.md) を使ってコードを自動的に生成する方法も学びました。
Gii をコード生成に使うと、ウェブ開発のプロセスの大部分が、いくつかのフォームに入力していくだけの簡単な仕事になります。
......@@ -10,9 +10,8 @@ Gii をコード生成に使うと、ウェブ開発のプロセスの大部分
* ドキュメント
- [決定版ガイド](http://www.yiiframework.com/doc-2.0/guide-README.html):
Definitive(決定的な) という名前が示すように、このガイドは Yii がどのように動作すべきものかを正確に記述し、
Yii を使用するについての全般的な手引きを提供するものです。
これは唯一最重要な Yii のチュートリアルであり、Yii のコードを少しでも書く前に読むべきものです。
名前が示すように、このガイドは Yii がどのように動作すべきものかを正確に記述し、Yii を使用するについての全般的な手引きを提供するものです。
これは唯一の最も重要な Yii のチュートリアルであり、Yii のコードを少しでも書く前にあなたはこれを読まなければなりません。
- [クラスリファレンス](http://www.yiiframework.com/doc-2.0/index.html):
これは Yii によって提供される全てのクラスの使用法を記述しています。
主として、コードを書いている時に、特定のクラス、メソッド、プロパティについて理解したい場合に読まれるべきものです。
......@@ -20,8 +19,7 @@ Gii をコード生成に使うと、ウェブ開発のプロセスの大部分
- [Wiki の記事](http://www.yiiframework.com/wiki/?tag=yii2):
Wiki の記事は、Yii のユーザが自身の経験に基づいて書いたものです。
ほとんどの記事は、料理本のレシピのように書かれており、特定の問題を Yii を使って解決する方法を示しています。
これらの記事の品質は決定版ガイドほどには良くないかもしれませんが、
より広範なトピックをカバーしていることと、たいていは即座に使えるソリューションを提供してくれることにおいて有用なものです。
これらの記事の品質は決定版ガイドほどには良くないかもしれませんが、より広範なトピックをカバーしていることと、たいていは即座に使えるソリューションを提供してくれることにおいて有用なものです。
- [書籍](http://www.yiiframework.com/doc/)
* [エクステンション](http://www.yiiframework.com/extensions/):
Yii は、ユーザによって作られた数千におよぶエクステンションのライブラリを誇りとしています。
......
アプリケーションを走らせる
==========================
Yii のインストールが終ると、実際に動く Yii のアプリケーションにアクセスすることが出来るようになります。
Yii のインストールが終ると、実際に動く Yii のアプリケーションにアクセスすることが出来ます。
その URL は、`http://hostname/basic/web/index.php` あるいは `http://hostname/index.php` など、設定によって異なります。
この節では、アプリケーションに組み込み済みの機能を紹介し、コードがどのように組織されているか、そして、一般にアプリケーションがリクエストをどのように処理するかを説明します。
......@@ -10,7 +10,7 @@ Yii 縺ョ繧、繝ウ繧ケ繝医繝ォ縺檎オゅk縺ィ縲∝ョ滄圀縺ォ蜍輔¥ Yii 縺ョ繧「繝励Μ繧ア繝シ繧
必要に応じて、説明の中の URL を読み替えてください。
機能<a name="functionality"></a>
機能 <a name="functionality"></a>
----
インストールされた基本的なアプリケーションは四つのページを持っています。
......@@ -26,11 +26,10 @@ Yii 縺ョ繧、繝ウ繧ケ繝医繝ォ縺檎オゅk縺ィ縲∝ョ滄圀縺ォ蜍輔¥ Yii 縺ョ繧「繝励Μ繧ア繝シ繧
ヘッダには、異なるページ間を行き来することを可能にするメインメニューバーがあります。
ブラウザのウィンドウの下部にツールバーがあることにも気がつくはずです。
これは Yii によって提供される便利な [デバッグツールバー](tool-debugger.md)
であり、ログメッセージ、レスポンスのステータス、データベースクエリの実行状況、その他、たくさんのデバッグ情報を記録・表示するものです。
これは Yii によって提供される便利な [デバッグツールバー](tool-debugger.md) であり、たくさんのデバッグ情報、例えば、ログメッセージ、レスポンスのステータス、実行されたデータベースクエリなどを記録して表示するものです。
アプリケーションの構造<a name="application-structure"></a>
アプリケーションの構造 <a name="application-structure"></a>
----------------------
アプリケーションにとって最も重要なディレクトリとファイルは (アプリケーションのルートディレクトリが `basic` だと仮定すると) 以下の通りです。
......@@ -48,7 +47,7 @@ basic/ 繧「繝励Μ繧ア繝シ繧キ繝ァ繝ウ縺ョ繝吶繧ケ繝代せ
vendor/ インストールされた Composer パッケージ (Yii フレームワークそのものを含む) を格納
views/ ビューファイルを格納
web/ アプリケーションのウェブルート。ウェブからアクセス可能なファイルを格納
assets/ Yii によって公開されるアセットファイル (javascript と CSS) を格納
assets/ Yii によって発行されるアセットファイル (javascript と CSS) を格納
index.php アプリケーションのエントリスクリプト (ブートストラップスクリプト)
yii Yii コンソールコマンド実行スクリプト
```
......@@ -58,19 +57,20 @@ basic/ 繧「繝励Μ繧ア繝シ繧キ繝ァ繝ウ縺ョ繝吶繧ケ繝代せ
Yii は [モデル・ビュー・コントローラ (MVC)](http://wikipedia.org/wiki/Model-view-controller) デザインパターンを実装していますが、それが上記のディレクトリ構成にも反映されています。
`models` ディレクトリが全ての [モデルクラス](structure-models.md) を格納し、`views` ディレクトリが全ての [ビュースクリプト](structure-views.md) を格納し、
`controllers` ディレクトリが全ての [コントローラクラス](structure-controllers.md) を格納します。
`controllers` ディレクトリが全ての [コントローラクラス](structure-controllers.md) を格納しています。
次の図がアプリケーションの静的な構造を示すものです。
![アプリケーションの静的な構造](images/application-structure.png)
各アプリケーションは一つのエントリスクリプト `web/index.php` を持ちます。これはアプリケーション中で唯一ウェブからアクセス可能な PHP スクリプトです。
各アプリケーションは一つのエントリスクリプト `web/index.php` を持ちます。
これはアプリケーション中で唯一ウェブからアクセス可能な PHP スクリプトです。
エントリスクリプトは入力されたリクエストを受け取って、[アプリケーション](structure-applications.md) のインスタンスを作成します。
[アプリケーション](structure-applications.md)[コンポーネント](concept-components.md) の助力を得てリクエストを解決し、リクエストを MVC に送付します。
[ウィジェット](structure-widgets.md) は、複雑で動的なユーザインタフェイス要素を構築するために、[ビュー](structure-views.md) の中で使われます。
リクエストのライフサイクル<a name="request-lifecycle"></a>
リクエストのライフサイクル <a name="request-lifecycle"></a>
--------------------------
次の図は、アプリケーションがどのようにリクエストを処理するかを示すものです。
......@@ -78,10 +78,8 @@ Yii 縺ッ [繝「繝Ν繝サ繝薙Η繝シ繝サ繧ウ繝ウ繝医Ο繝シ繝ゥ (MVC)](http://wikipedia.org/
![リクエストのライフサイクル](images/request-lifecycle.png)
1. ユーザが [エントリスクリプト](structure-entry-scripts.md) `web/index.php` に対してリクエストを出します。
2. エントリスクリプトはアプリケーションの [構成情報](concept-configurations.md) を読み出して、
リクエストを処理する [アプリケーション](structure-applications.md) のインスタンスを作成します。
3. アプリケーションは、[リクエスト](runtime-requests.md) アプリケーションコンポーネントの助力を得て、
リクエストされた [ルート](runtime-routing.md) を解決します。
2. エントリスクリプトはアプリケーションの [構成情報](concept-configurations.md) を読み出して、リクエストを処理する [アプリケーション](structure-applications.md) のインスタンスを作成します。
3. アプリケーションは、[リクエスト](runtime-requests.md) アプリケーションコンポーネントの助力を得て、リクエストされた [ルート](runtime-routing.md) を解決します。
4. アプリケーションがリクエストを処理する [コントローラ](structure-controllers.md) のインスタンスを作成します。
5. コントローラが [アクション](structure-controllers.md) のインスタンスを作成し、アクションのためのフィルタを実行します。
6. 一つでもフィルタが失敗したときは、アクションはキャンセルされます。
......
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