フォームを扱う ============== この節では、ユーザからデータを取得するためのフォームを持つ新しいページを作る方法を説明します。 このページは名前のインプットフィールドとメールのインプットフィールドを持つフォームを表示します。 ユーザからこれら二つの情報を受け取った後、ページは入力された値を確認のためにエコーバックします。 この目的を達するために、一つの [アクション](structure-controllers.md) と 二つの [ビュー](structure-views.md) を作成する以外に、一つの [モデル](structure-models.md) をも作成します。 このチュートリアルを通じて、次の方法を学びます。 * フォームを通じてユーザによって入力されるデータを表す [モデル](structure-models.md) を作成する方法 * 入力されたデータを検証する規則を宣言する方法 * [ビュー](structure-views.md) の中で HTML フォームを構築する方法 モデルを作成する ---------------- ユーザに入力してもらうデータは、下に示されているように `EntryForm` モデルクラスとして表現され、`models/EntryForm.php` というファイルに保存されます。 クラスファイルの命名規約についての詳細は [クラスのオートロード](concept-autoloading.md) の節を参照してください。 ```php Info|情報: [[yii\base\Model]] はデータベーステーブルと関連*しない*モデルクラスの親として使われます。 データベーステーブルと対応するモデルクラスでは、通常は [[yii\db\ActiveRecord]] が親になります。 `EntryForm` クラスは二つのパブリックメンバー、`name` と `email` を持っており、これらがユーザによって入力されるデータを保管するのに使われます。 このクラスはまた `rules()` という名前のメソッドを持っています。このメソッドがデータを検証する一連の規則を返します。 上記で宣言されている検証規則は次のことを述べています。 * `name` と `email` は、ともに値を要求される * `email` のデータは構文的に正当なメールアドレスでなければならない ユーザによって入力されたデータを `EntryForm` オブジェクトに投入した後、[[yii\base\Model::validate()|validate()]] を呼んでデータ検証ルーチンを始動することが出来ます。 データ検証が失敗すると [[yii\base\Model::hasErrors|hasErrors]] プロパティが true に設定されます。 そして、[[yii\base\Model::getErrors|errors]] を通じて、どのような検証エラーが発生したかを知ることが出来ます。 ```php name = 'Qiang'; $model->email = 'bad'; if ($model->validate()) { // 良し! } else { // 失敗! // $model->getErrors() を使う } ``` アクションを作成する -------------------- 次に、この新しいモデルを使う `entry` アクションを `site` コントローラに作る必要があります。 アクションを作成して使うプロセスについては、[こんにちは、と言う](start-hello.md) の節で既に説明されています。 ```php load(Yii::$app->request->post()) && $model->validate()) { // $model に有効なデータを受け取った場合 // ここで $model について何か意味のあることをする ... return $this->render('entry-confirm', ['model' => $model]); } else { // ページの初期表示か、または、何か検証エラーがある場合 return $this->render('entry', ['model' => $model]); } } } ``` アクションは最初に `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` コンポーネントが `$_POST` データにアクセスするために使われています。 すべてが適正である場合、アクションは `entry-confirm` という名前のビューを表示して、データの送信が成功したことをユーザに確認させます。 データが送信されなかったり、データがエラーを含んでいたりする場合は、`entry` ビューが表示され、その中で HTML フォームが (もし有れば) 検証エラーのメッセージとともに表示されます。 > Note|注意: この簡単な例では、有効なデータ送信に対して単純に確認ページを表示しています。 実際の仕事では、[フォーム送信の諸問題](http://en.wikipedia.org/wiki/Post/Redirect/Get) を避けるために、[[yii\web\Controller::refresh()|refresh()]] または [[yii\web\Controller::redirect()|redirect()]] を使うことを考慮すべきです。 ビューを作成する ---------------- 最後に、`entry-confirm` と `entry` という名前の二つのビューファイルを作成します。 今まさに説明したように、これらが `entry` アクションによって表示されます。 `entry-confirm` ビューは単純に名前とメールのデータを表示するものです。このビューは `views/site/entry-confirm.php` というファイルに保存しなければなりません。 ```php
あなたは次の情報を入力しました