|
|
|
@ -1,24 +1,24 @@
|
|
|
|
|
「こんにちは」と言う |
|
|
|
|
==================== |
|
|
|
|
|
|
|
|
|
この節では、アプリケーションに新しい「こんにちは」というページを作成する方法を説明します。 |
|
|
|
|
この目的を達するために、[アクション](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) をどのようにして作るか、そして、 |
|
|
|
|
3. アプリケーションはどのようにしてリクエストを [アクション](structure-controllers.md#creating-actions) に送付するか。 |
|
|
|
|
1. リクエストに応える [アクション](structure-controllers.md) を作成する方法 |
|
|
|
|
2. レスポンスの内容を構成する [ビュー](structure-views.md) を作成する方法 |
|
|
|
|
3. アプリケーションがリクエストを [アクション](structure-controllers.md#creating-actions) に送付する仕組み |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
アクションを作成する<a name="creating-action"></a> |
|
|
|
|
-------------------- |
|
|
|
|
|
|
|
|
|
「こんにちは」のタスクのために、`message` パラメータをリクエストから読んでそのメッセージをユーザに表示して返す `say` [アクション](structure-controllers.md#creating-actions) を作ります。 |
|
|
|
|
リクエストが `message` パラメータを提供しない場合は、このアクションは既定値として "Hello" というメッセージを表示するものとします。 |
|
|
|
|
「こんにちは」のタスクのために、`message` パラメータをリクエストから読んで、そのメッセージをユーザに表示して返す `say` [アクション](structure-controllers.md#creating-actions) を作ります。 |
|
|
|
|
リクエストが `message` パラメータを提供しない場合は、アクションは既定値として "Hello" というメッセージを表示するものとします。 |
|
|
|
|
|
|
|
|
|
> Info|情報: [アクション](structure-controllers.md#creating-actions) は、エンドユーザが直接に参照して実行できるオブジェクトです。 |
|
|
|
|
アクションは [コントローラ](structure-controllers.md) によってグループ化されます。 |
|
|
|
@ -27,7 +27,7 @@
|
|
|
|
|
アクションは [コントローラ](structure-controllers.md) の中で宣言されなければなりません。 |
|
|
|
|
話を簡単にするために、`say` アクションを既存の `SiteController` の中で宣言しましょう。 |
|
|
|
|
このコントローラは `controllers/SiteController.php` というクラスファイルの中で定義されています。 |
|
|
|
|
次のようにして、新しいアクションを書き始めます: |
|
|
|
|
次のようにして、新しいアクションを書き始めます。 |
|
|
|
|
|
|
|
|
|
```php |
|
|
|
|
<?php |
|
|
|
@ -47,9 +47,9 @@ class SiteController extends Controller
|
|
|
|
|
} |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
上記のコードで、`say` アクションは `SiteController` クラスの中で `actionSay` という名前のメソッドとして定義されています。 |
|
|
|
|
Yii はコントローラクラスの中でアクションのメソッドとアクションでないメソッドを区別するために、`action` という接頭辞を使います。 |
|
|
|
|
`action` という接頭辞の後の名前がアクション ID にマップされます。 |
|
|
|
|
上記のコードでは、`SiteController` クラスの中で、`say` アクションが `actionSay` という名前のメソッドとして定義されています。 |
|
|
|
|
Yii はコントローラクラスの中で、アクションのメソッドとアクションでないメソッドを区別するために、`action` という接頭辞を使います。 |
|
|
|
|
`action` という接頭辞の後に続く名前がアクション ID にマップされます。 |
|
|
|
|
|
|
|
|
|
アクションを命名するについては、Yii がアクション ID をどのように取り扱うかを知っているべきです。 |
|
|
|
|
アクション ID は常に小文字で参照されます。 |
|
|
|
@ -57,16 +57,16 @@ Yii はコントローラクラスの中でアクションのメソッドとア
|
|
|
|
|
アクションメソッドの名前は、アクション ID からダッシュを全て削除し、各単語の先頭の文字を大文字にした結果に `action` という接頭辞を付けたものとします。 |
|
|
|
|
例えば、アクション ID `create-comment` に対応するアクションメソッド名は `actionCreateComment` となります。 |
|
|
|
|
|
|
|
|
|
私たちの例では、このアクションメソッドは `$message` というパラメータを取ります。 |
|
|
|
|
そして、このパラメータは `"Hello"` という既定値を取ります |
|
|
|
|
(PHP で関数やメソッドの引数について既定値をセットするのと全く同じ方法を使います)。 |
|
|
|
|
アプリケーションは、リクエストを受け取って、当該リクエストの処理を `say` アクションに任せると決定した場合、リクエストの中に同じ名前の付いたパラメータがあれば、それをこのパラメータに代入します。 |
|
|
|
|
私たちの例では、このアクションメソッドは `"Hello"` という既定値をもつ `$message` というパラメータを取ります |
|
|
|
|
(PHP で関数やメソッドの引数に既定値をセットするのと全く同じ方法です)。 |
|
|
|
|
アプリケーションは、リクエストを受け取ったとき、当該リクエストの処理を `say` アクションが担当すべきであると決定した場合は、 |
|
|
|
|
リクエストの中に同じ名前の付いたパラメータがあれば、その値をこのパラメータに代入します。 |
|
|
|
|
言い換えれば、もしリクエストに `"GoodBye"` という値の `message` パラメータが入っていれば、アクションの `$message` 変数にその値が割り当てられます。 |
|
|
|
|
|
|
|
|
|
このアクションメソッドの中では、[[yii\web\Controller::render()|render()]] が呼ばれて `say` と言う名前の [ビュー](structure-views.md) ファイルがレンダリングされます。 |
|
|
|
|
`message` パラメータも同時にビューに渡され、そこで使用されます。 |
|
|
|
|
レンダリング結果はアクションメソッドによって返されます。 |
|
|
|
|
返された結果はアプリケーションによって受け取られ、ブラウザ上でエンドユーザに(完全な HTML ページの一部として)表示されます。 |
|
|
|
|
返された結果はアプリケーションによって受け取られ、ブラウザ上でエンドユーザに (完全な HTML ページの一部として) 表示されます。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ビューを作成する<a name="creating-view"></a> |
|
|
|
@ -98,7 +98,7 @@ use yii\helpers\Html;
|
|
|
|
|
試してみる<a name="trying-it-out"></a> |
|
|
|
|
---------- |
|
|
|
|
|
|
|
|
|
アクションとビューを作成したら、新しいページに下記の URL でアクセスしてみましょう: |
|
|
|
|
アクションとビューを作成したら、下記の URL で新しいページにアクセスすることが出来ます。 |
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
http://hostname/index.php?r=site/say&message=Hello+World |
|
|
|
@ -106,11 +106,11 @@ http://hostname/index.php?r=site/say&message=Hello+World
|
|
|
|
|
|
|
|
|
|
![Hello World](images/start-hello-world.png) |
|
|
|
|
|
|
|
|
|
この URL は "Hello World" を表示するページになります。 |
|
|
|
|
この URL は、結果として、"Hello World" を表示するページになります。 |
|
|
|
|
このページはアプリケーションの他のページと同じヘッダとフッタを共有します。 |
|
|
|
|
|
|
|
|
|
URL から `message` パラメータを省略すると、"Hello" だけを表示するページを見ることになるでしょう。 |
|
|
|
|
これは、`message` が `actionSay()` メソッドにパラメータとして渡され、省略された場合には、既定値である `"Hello"` が代りに使われるからです。 |
|
|
|
|
これは、`message` が `actionSay()` メソッドにパラメータとして渡されるものであり、それが省略された場合には、既定値である `"Hello"` が代りに使われるからです。 |
|
|
|
|
|
|
|
|
|
> Info|情報: 新しいページは他のページと同じヘッダとフッタを共有しますが、それは [[yii\web\Controller::render()|render()]] メソッドが `say` ビューの結果をいわゆる [レイアウト](structure-views.md#layouts) に自動的に埋め込むからです。 |
|
|
|
|
レイアウトは、この場合、`views/layouts/main.php` にあります。 |
|
|
|
@ -118,7 +118,7 @@ URL から `message` パラメータを省略すると、"Hello" だけを表示
|
|
|
|
|
上記の URL の `r` パラメータについて、さらに説明が必要でしょう。 |
|
|
|
|
これは [ルート](runtime-routing.md)、すなわち、特定のアクションを指し示すアプリケーション全体で一意な ID を表します。 |
|
|
|
|
ルートの書式は `ControllerID/ActionID` です。 |
|
|
|
|
アプリケーションはリクエストを受け取ると、このパラメータをチェックし、`ControllerID` の部分を使って、このリクエストを処理するためにどのコントローラクラスのインスタンスを作成すべきかを決定します。 |
|
|
|
|
アプリケーションはリクエストを受け取ると、このパラメータ `r` をチェックし、`ControllerID` の部分を使って、このリクエストを処理するためにどのコントローラクラスのインスタンスを作成すべきかを決定します。 |
|
|
|
|
そして、コントローラは `ActionID` の部分を使って、実際の仕事をするためにどのアクションを呼び出すべきかを決定します。 |
|
|
|
|
この例で言えば、`site/say` というルートは、`SiteController` コントローラクラスと `say` アクションとして解決されます。 |
|
|
|
|
結果として、`SiteController::actionSay()` メソッドがリクエストを処理するために呼び出されます。 |
|
|
|
|