From b0ddf2e848c754569c7d7b8a05d4b8a96109883d Mon Sep 17 00:00:00 2001 From: Nobuo Kihara Date: Thu, 23 Oct 2014 06:56:17 +0900 Subject: [PATCH 1/2] Better word for "section" [ci skip] --- docs/guide-ja/intro-upgrade-from-v1.md | 46 +++++++++++++++---------------- docs/guide-ja/start-hello.md | 8 +++--- docs/guide-ja/start-installation.md | 6 ++-- docs/guide-ja/start-workflow.md | 2 +- docs/internals-ja/translation-workflow.md | 2 +- 5 files changed, 32 insertions(+), 32 deletions(-) diff --git a/docs/guide-ja/intro-upgrade-from-v1.md b/docs/guide-ja/intro-upgrade-from-v1.md index 04af34a..283c88f 100644 --- a/docs/guide-ja/intro-upgrade-from-v1.md +++ b/docs/guide-ja/intro-upgrade-from-v1.md @@ -3,9 +3,9 @@ Yii フレームワークは 2.0 のために完全に書き直されたため、バージョン 1.1 と 2.0 の間には数多くの違いがあります。 結果として、バージョン 1.1 からのアップグレードは、マイナーバージョン間でのアップグレードのような些細な問題ではなくなりました。 -この章では、二つのバージョン間の主要な違いを説明します。 +この節では、二つのバージョン間の主要な違いを説明します。 -もし以前に Yii 1.1 を使ったことがなければ、あなたはこの章を飛ばして直接に "[始めよう](start-installation.md)" に進んでも大丈夫です。 +もし以前に Yii 1.1 を使ったことがなければ、あなたはこの節を飛ばして直接に "[始めよう](start-installation.md)" に進んでも大丈夫です。 Yii 2.0 は、この要約でカバーされているよりも多くの新機能を導入していることに注意してください。 公式ガイド全体を通読して全ての新機能について学習することを強く推奨します。 @@ -17,9 +17,9 @@ Yii 2.0 は、この要約でカバーされているよりも多くの新機能 Yii 2.0 は、事実上の標準的 PHP パッケージ管理ソフトである [Composer](https://getcomposer.org/) を全面的に採用しています。 コアフレームワークも、エクステンションも、インストールは Composer を通じて処理されます。 -[Yii をインストールする](start-installation.md) の章を参照して、Yii 2.0 をインストールする方法を学習してください。 +[Yii をインストールする](start-installation.md) の節を参照して、Yii 2.0 をインストールする方法を学習してください。 新しいエクステンションを作成したい場合、または既存の 1.1 エクステンションを 2.0 互換のエクステンションに変換したい場合は、 -ガイドの [エクステンションを作成する](structure-extensions.md#creating-extensions) の章を参照してください。 +ガイドの [エクステンションを作成する](structure-extensions.md#creating-extensions) の節を参照してください。 PHP の必要条件 @@ -102,7 +102,7 @@ $object = Yii::createObject([ ], [$param1, $param2]); ``` -設定に関する更なる詳細は、[オブジェクトの設定](concept-configurations.md) の章で見ることが出来ます。 +設定に関する更なる詳細は、[オブジェクトの設定](concept-configurations.md) の節で見ることが出来ます。 イベント @@ -125,7 +125,7 @@ $component->on($eventName, $handler); // $component->off($eventName, $handler); ``` -イベント関連の機能には数多くの改良がなされました。更なる詳細は [イベント](concept-events.md) の章を参照してください。 +イベント関連の機能には数多くの改良がなされました。更なる詳細は [イベント](concept-events.md) の節を参照してください。 パスエイリアス @@ -143,7 +143,7 @@ Yii 2.0 は、パスエイリアスの使用を、ファイル/ディレクト サードパーティのライブラリ、例えば Zend フレームワークなどを使う場合には、そのフレームワークのインストールディレクトリを指す `@Zend` というパスエイリアスを定義することが出来ます。 一旦そうしてしまえば、その Zend フレームワークのライブラリ中のどんなクラスでも、同じようにオートロードすることが出来るようになります。 -パスエイリアスに関する詳細は [パスエイリアス](concept-aliases.md) の章を参照してください。 +パスエイリアスに関する詳細は [パスエイリアス](concept-aliases.md) の節を参照してください。 ビュー @@ -165,7 +165,7 @@ echo $this->render('_item', ['item' => $item]); PHP を主たるテンプレート言語として使うのに加えて、Yii 2.0 は人気のある二つのテンプレートエンジン、Smarty と Twig に対する正式なサポートを備えています。 Prado テンプレートエンジンはもうサポートされません。 これらのテンプレートエンジンを使うためには、[[yii\base\View::$renderers|View::$renderers]] プロパティをセットして、`view` アプリケーションコンポーネントを設定する必要があります。 -詳細は [テンプレートエンジン](tutorial-template-engines.md) の章を参照してください。 +詳細は [テンプレートエンジン](tutorial-template-engines.md) の節を参照してください。 モデル @@ -199,7 +199,7 @@ public function scenarios() ほとんどの場合、[[yii\base\Model::rules()|rules()]] メソッドが存在し得るシナリオを十全に記述することが出来るなら、そして `unsafe` な属性を宣言する必要が無いなら、[[yii\base\Model::scenarios()|scenarios()]] をオーバーライドする必要はありません。 -モデルについてさらに詳細を学習するために、[モデル](structure-models.md) の章を参照してください。 +モデルについてさらに詳細を学習するために、[モデル](structure-models.md) の節を参照してください。 コントローラ @@ -223,7 +223,7 @@ public function actionView($id) } ``` -コントローラに関する更なる詳細については [コントローラ](structure-controllers.md) の章を参照してください。 +コントローラに関する更なる詳細については [コントローラ](structure-controllers.md) の節を参照してください。 ウィジェット @@ -250,7 +250,7 @@ $form = ActiveForm::begin([ ActiveForm::end(); ``` -更なる詳細については [ウィジェット](structure-widgets.md) の章を参照してください。 +更なる詳細については [ウィジェット](structure-widgets.md) の節を参照してください。 テーマ @@ -266,7 +266,7 @@ ActiveForm::end(); また、`CThemeManager` コンポーネントはもうありません。 その代りに、`theme` は `view` アプリケーションコンポーネントの設定可能なプロパティになりました。 -更なる詳細については [テーマ](output-theming.md) の章を参照してください。 +更なる詳細については [テーマ](output-theming.md) の節を参照してください。 コンソールアプリケーション @@ -282,7 +282,7 @@ ActiveForm::end(); Yii 2.0 はコメントブロックからコマンドのヘルプ情報を自動的に生成する機能をサポートしています。 -更なる詳細については [コンソールコマンド](tutorial-console.md) の章を参照してください。 +更なる詳細については [コンソールコマンド](tutorial-console.md) の節を参照してください。 国際化 @@ -293,7 +293,7 @@ Yii 2.0 は [PECL intl PHP モジュール](http://pecl.php.net/package/intl) メッセージは `i18n` アプリケーションコンポーネント経由で翻訳されるようになりました。 このコンポーネントはメッセージソースのセットを管理するもので、メッセージのカテゴリに基づいて異なるメッセージソースを使うことを許容します。 -更なる詳細については [国際化](tutorial-i18n.md) の章を参照してください。 +更なる詳細については [国際化](tutorial-i18n.md) の節を参照してください。 アクションフィルター @@ -318,7 +318,7 @@ public function behaviors() } ``` -更なる詳細については [フィルター](structure-filters.md) の章を参照してください。 +更なる詳細については [フィルター](structure-filters.md) の節を参照してください。 アセット @@ -331,7 +331,7 @@ Yii 2.0 は、*アセットバンドル* と呼ばれる新しい概念を導入 アセットバンドルを [[yii\web\AssetBundle::register()]] を通じて登録することによって、そのバンドルに含まれるアセットにウェブでアクセスできるようになります。 Yii 1 とは異なり、バンドルを登録したページは、そのバンドルで規定された JavaScript と CSS ファイルを自動的に参照するようになります。 -更なる詳細については [アセットを管理する](structure-assets.md) の章を参照してください。 +更なる詳細については [アセットを管理する](structure-assets.md) の節を参照してください。 ヘルパー @@ -345,7 +345,7 @@ Yii 2.0 はよく使われるスタティックなヘルパークラスを数多 * [[yii\helpers\FileHelper]] * [[yii\helpers\Json]] -更なる詳細については [ヘルパー概要](helper-overview.md) の章を参照してください。 +更なる詳細については [ヘルパー概要](helper-overview.md) の節を参照してください。 フォーム @@ -366,7 +366,7 @@ Yii 2.0 は [[yii\widgets\ActiveForm]] を使ってフォームを作成する ``` -更なる詳細については [フォームを作成する](input-forms.md) の章を参照してください。 +更なる詳細については [フォームを作成する](input-forms.md) の節を参照してください。 クエリビルダ @@ -390,7 +390,7 @@ $rows = $command->queryAll(); 何より良いのは、このようなクエリ構築メソッドが [Active Record](db-active-record.md) を扱う時にも使える、ということです。 -更なる詳細については [クエリビルダ](db-query-builder.md) の章を参照してください。 +更なる詳細については [クエリビルダ](db-query-builder.md) の節を参照してください。 アクティブレコード @@ -462,7 +462,7 @@ public function init() コンストラクタにパラメータを追加する場合は、[[yii\db\ActiveRecord::instantiate()]] をオーバーライドする必要があるかもしれないことに注意してください。 アクティブレコードについては、他にも多くの変更と機能強化がなされています。 -詳細については [アクティブレコード](db-active-record.md) の章を参照してください。 +詳細については [アクティブレコード](db-active-record.md) の節を参照してください。 アクティブレコードのビヘイビア @@ -504,7 +504,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 管理 @@ -523,12 +523,12 @@ Yii 2 の URL 管理は 1.1 のそれと似たようなものです。 ] ``` -更なる詳細については [URL 管理](runtime-url-handling.md) の章を参照してください。 +更なる詳細については [URL 管理](runtime-url-handling.md) の節を参照してください。 Yii 1.1 と 2.x を一緒に使う --------------------------- Yii 2.0 と一緒に使いたい Yii 1.1 のレガシーコードを持っている場合は、 -[Yii 1.1 と 2.x を一緒に使う](tutorial-yii-integration.md) の章を参照してください。 +[Yii 1.1 と 2.x を一緒に使う](tutorial-yii-integration.md) の節を参照してください。 diff --git a/docs/guide-ja/start-hello.md b/docs/guide-ja/start-hello.md index 3198425..c3571b8 100644 --- a/docs/guide-ja/start-hello.md +++ b/docs/guide-ja/start-hello.md @@ -1,7 +1,7 @@ 「こんにちは」と言う ==================== -この章では、アプリケーションに新しい「こんにちは」というページを作成する方法を説明します。 +この節では、アプリケーションに新しい「こんにちは」というページを作成する方法を説明します。 この目的を達するために、[アクション](structure-controllers.md#creating-actions) と [ビュー](structure-views.md) を作成することになります: * アプリケーションがこのページへのリクエストをそのアクションに送致(dispatch)し、 @@ -25,7 +25,7 @@ アクションの実行結果が、エンドユーザが受け取るレスポンスです。 アクションは [コントローラ](structure-controllers.md) の中で宣言されなければなりません。 -話を簡単にするために、`say` アクションを既存の `SiteController` の中で宣言しても構いません。 +話を簡単にするために、`say` アクションを既存の `SiteController` の中で宣言しましょう。 このコントローラは `controllers/SiteController.php` というクラスファイルの中で定義されています。 次のようにして、新しいアクションを書き始めます: @@ -133,11 +133,11 @@ URL から `message` パラメータを省略すると、"Hello" だけを表示 まとめ ------ -この章では、MVC デザインパターンのうちのコントローラとビューの部分に触れました。 +この節では、MVC デザインパターンのうちのコントローラとビューの部分に触れました。 特定のリクエストを処理するためのアクションをコントローラの一部として作成しました。 また、レスポンスのコンテンツを構成するためにビューも作成しました。 この単純な例においては、使用される唯一のデータが `message` パラメータであったため、モデルは関係してきませんでした。 また、Yii におけるルートについても学びました。ルートはユーザのリクエストとコントローラのアクションとの橋渡しとして働くものです。 -次の章では、モデルを作成する方法を学び、そして、HTML フォームを含むページを追加します。 +次の節では、モデルを作成する方法を学び、そして、HTML フォームを含むページを追加します。 diff --git a/docs/guide-ja/start-installation.md b/docs/guide-ja/start-installation.md index 10fbbd2..dfae544 100644 --- a/docs/guide-ja/start-installation.md +++ b/docs/guide-ja/start-installation.md @@ -40,7 +40,7 @@ Composer がインストールされたら、ウェブからアクセスでき > Github にログインすると API の帯域制限が緩和され、Composer が仕事を続けることが出来るようになります。 > 更なる詳細については、[Composer documentation](https://getcomposer.org/doc/articles/troubleshooting.md#api-rate-limit-and-oauth-tokens) を参照してください。 -> Tip: Yii の最新の開発バージョンをインストールしたい場合は、[stability option](https://getcomposer.org/doc/04-schema.md#minimum-stability) を追加した次のコマンドを代りに使うことが出来ます: +> Tip|ヒント: Yii の最新の開発バージョンをインストールしたい場合は、[stability option](https://getcomposer.org/doc/04-schema.md#minimum-stability) を追加した次のコマンドを代りに使うことが出来ます: > > composer create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic basic > @@ -112,7 +112,7 @@ Yii の最低必要条件を満たすように PHP のインストールを構 ウェブサーバを設定する ---------------------- -> Info|情報: もし Yii の試運転をしているだけで、実運用のサーバに配置する意図がないのであれば、当面、この節は飛ばしても構いません。 +> Info|情報: もし Yii の試運転をしているだけで、実運用のサーバに配置する意図がないのであれば、当面、この項は飛ばしても構いません。 上記の説明に従ってインストールされたアプリケーションは、[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/) とも互換性があります。 @@ -128,7 +128,7 @@ Yii 2.0 は、また、facebook の [HHVM](http://hhvm.com/) とも互換性が > Info|情報: ウェブサーバの設定を修正する権限のない共用ホスティング環境でアプリケーションが走る場合でも、 セキュリティ強化のためにアプリケーションの構造を調整することが出来ます。 -更なる詳細については、[共有ホスティング環境](tutorial-shared-hosting.md) の章を参照してください。 +更なる詳細については、[共有ホスティング環境](tutorial-shared-hosting.md) の節を参照してください。 ### 推奨される Apache の設定 diff --git a/docs/guide-ja/start-workflow.md b/docs/guide-ja/start-workflow.md index a6b3153..3397e8c 100644 --- a/docs/guide-ja/start-workflow.md +++ b/docs/guide-ja/start-workflow.md @@ -3,7 +3,7 @@ Yii のインストールが終ると、実際に動く Yii のアプリケーションにアクセスすることが出来るようになります。 その URL は、`http://hostname/basic/web/index.php` あるいは `http://hostname/index.php` など、設定によつて異なります。 -この章では、アプリケーションに組み込み済みの機能を紹介し、コードがどのように組織されているか、 +この節では、アプリケーションに組み込み済みの機能を紹介し、コードがどのように組織されているか、 そして、一般にアプリケーションがリクエストをどのように処理するかを説明します。 > Info|情報: 話を簡単にするために、この「始めよう」のチュートリアルを通じて、 diff --git a/docs/internals-ja/translation-workflow.md b/docs/internals-ja/translation-workflow.md index 6954c7f..cec7a61 100644 --- a/docs/internals-ja/translation-workflow.md +++ b/docs/internals-ja/translation-workflow.md @@ -26,7 +26,7 @@ Yii は国際的なアプリケーションと開発者にとって役に立つ 値が空白の場合は、メッセージは翻訳されないものと見なされます。 翻訳が不要になったメッセージは、翻訳が一組の '@@' マークで囲まれます。 メッセージ文字列は複数形書式とともに使うことが出来ます。 -詳細は [ガイドの国際化の章](../guide-ja/tutorial-i18n.md) を参照してください。 +詳細はガイドの [国際化](../guide-ja/tutorial-i18n.md) の節を参照してください。 ドキュメンテーション -------------------- From 62e50f46c7ae9d1de8267042956f7c9faf294008 Mon Sep 17 00:00:00 2001 From: Nobuo Kihara Date: Thu, 23 Oct 2014 22:51:19 +0900 Subject: [PATCH 2/2] docs/guide-ja/start-forms.md added [ci skip] --- docs/guide-ja/images/start-entry-confirmation.png | Bin 0 -> 39844 bytes docs/guide-ja/images/start-form-validation.png | Bin 0 -> 40121 bytes docs/guide-ja/start-forms.md | 242 ++++++++++++++++++++++ 3 files changed, 242 insertions(+) create mode 100644 docs/guide-ja/images/start-entry-confirmation.png create mode 100644 docs/guide-ja/images/start-form-validation.png create mode 100644 docs/guide-ja/start-forms.md diff --git a/docs/guide-ja/images/start-entry-confirmation.png b/docs/guide-ja/images/start-entry-confirmation.png new file mode 100644 index 0000000000000000000000000000000000000000..ed442a4c6e6f17afbf2722c69296d58304db25bc GIT binary patch literal 39844 zcmeFYS6EYB*EWhEq9CA1?+S{7^xi=!3QF%CX;MQAJs=<;(p02(kluR<9RcYzbP|fR zKnN|A0Ljnue((2)dtdutAMKOPL9WSKbB-~`nC%|-94lN+MUj}0mJkOAhxqj?ISm|~ zn`JmSc+9tPubzagwUFT85VqRBe5v;OStr&ktbrfNUN9GYO6#UDQkRpH(f^Xm-asisNl|HLe*d|d=@)r<5ErGK z{Mse1vIk5Yfc1479`tkF7*0D+SrFYI!f8x-cJD_AAI^`%>X7AD#-o`AFR@)-89ez9 z1P3x1ef?w&VWGEz0vwn^Z?Kv)TRnLW8brL<&o zt)Svo{?cP4j9tZw{>Tsia-IxG{`G2|@UrtOP0WJ6ww=O4Ndf_NCt@+zeqd3GUc+e+rEqw>)bP{*V3PSqS8u?>Wpeqms5e9(?3 z`{9n>Y-;VRv>QuF5B1o7KX$9$+Wj@KG)m(azopTX+ZZBOa|JSBpd%Kv3eC3?OSje zI%=E;W_KI{A2{Pd+nGLocy*6J=LY3ckUR5Ddl|+VTtb=qGsMS%glfbj!3xgg^aKo< zbg2Xh9YCJjyB`S5$lrWOFeCKCslIn}nVC>7SAIY+X zvI*6#3JkP3iijX#O(C@MEiXVXEXK417#xEv4)!7@ zD}NNmLmtWAL%sUR-0U51U!q_l?i-psMmIvYJ8lI0foC7O-`VPcN*Ja{>B8Q2l=bfZ zWc*oY?pyJ4#$`uW9W(x#)9|uVdp~a_a-8h3@Z)HWERB?LhTM^UcPqe})|zBLLw}6cD7yl? zIlH|UNuiO3cdeX%_ypP1x6a4C2@AR*+EH3v+SA31Itbk~9ZlUs?FR)6YT(RcrL?@= zy!337B7Yr_MsU$`cE`k1h)Di^P??Npe*W0N7S)z!a#6B>@}nWzp&LW`oS@RDrKJXr z1~E0^bH{V9=W^#-<}}4<#bm|2#W=-IfOndXn~WAOn?OzcK4>3apLvwnQTjH=7XOhO z%J7JZR_(44F(0uVu@l`pVg#`!F)1wxZHI!8f>DlA4qZ=0Whw8-Y3BZ@#-K)6?nQ2` zvf`UxPj;V(KH+>~ktZ-AGf|qykXJtBKDaV;oQO&S@z?XJ@|W`mm_4*v22?__2UbdR zzdjzQ8b7F`=Kx6m}i;CnX7hjb{=+~KPtFi z%#zF^CFdhYsVMb{?-Q9kNa)-Z<1!Gcl_^Et#3yXv!dRB1J>y{!yZug;cx9d=#SG}t^C0sp+AIv z4Ci+LsLfrScrdPdxOQ525kUi|vF8uH*%O4@@jlODy>;-J`G*QAqJD!UND^nv?PUM2 zft%uEdeO=%R>Qr5WA-W~amE9t^KHZL7o&kAt{~R{gBX($16WFaQvG9qL-2WMa@1(g z�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 literal 0 HcmV?d00001 diff --git a/docs/guide-ja/images/start-form-validation.png b/docs/guide-ja/images/start-form-validation.png new file mode 100644 index 0000000000000000000000000000000000000000..f38652871ddc5a0bdef948f4db0f5bcbf7456de7 GIT binary patch literal 40121 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 literal 0 HcmV?d00001 diff --git a/docs/guide-ja/start-forms.md b/docs/guide-ja/start-forms.md new file mode 100644 index 0000000..d8146e6 --- /dev/null +++ b/docs/guide-ja/start-forms.md @@ -0,0 +1,242 @@ +フォームを扱う +============== + +この節では、ユーザからデータを取得するフォームを持つ新しいページを作る方法を説明します。 +このページは名前の入力フィールドとメールの入力フィールドを持つフォームを表示します。 +ユーザからこれら二つの情報を受け取った後、ページは確認のために入力された値をエコーバックします。 + +この目的を達するために、一つの [アクション](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 + +

あなたは次の情報を入力しました:

+ +
    +
  • : name) ?>
  • +
  • : email) ?>
  • +
+``` + +`entry` ビューは HTML フォームを表示します。これは `views/site/entry.php` というファイルに保存しなければなりません。 + +```php + + + + field($model, 'name') ?> + + field($model, 'email') ?> + +
+ 'btn btn-primary']) ?> +
+ + +``` + +このビューは HTML フォームを構築するのに、[[yii\widgets\ActiveForm|ActiveForm]] と呼ばれる強力な [ウィジェット](structure-widgets.md) を使います。 +ウィジェットの `begin()` メソッドと `end()` メソッドが、それぞれ、フォームの開始タグと終了タグを表示します。 +この二つのメソッドの呼び出しの間に、[[yii\widgets\ActiveForm::field()|field()]] メソッドによって入力フィールドが作成されます。 +最初の入力フィールドは "name" のデータ、第二の入力フィールドは "email" のデータのためのものです。 +入力フィールドの後に、[[yii\helpers\Html::submitButton()]] メソッドが呼ばれて、送信ボタンを生成しています。 + + +試してみる +---------- + +どのように動作するかを見るために、ブラウザで下記の URL をアクセスしてください: + +``` +http://hostname/index.php?r=site/entry +``` + +二つの入力フィールドを持つフォームを表示するページが表示されるでしょう。 +それぞれの入力フィールドの前には、どんなデータを入力すべきかを示すラベルがあります。 +何も入力せずに、あるいは、無効なメールアドレスを入力して送信ボタンをクリックすると、 +それぞれ問題のある入力フィールドの続きにエラーメッセージが表示されます。 + +![検証エラーのあるフォーム](images/start-form-validation.png) + +有効な名前とメールアドレスを入力してから送信ボタンをクリックすると、たった今入力したデータを表示する新しいページが表示されます。 + +![データ入力の確認](images/start-entry-confirmation.png) + + +### 魔法の説明 + +あなたは、舞台裏で HTML フォームがどのように動いているのか、不思議に思うかも知れません。なぜなら、 +フォームが、ほとんど魔法のように、各入力フィールドのラベルを表示し、データを正しく入力しない場合には +ページをリロードすることなくエラーメッセージを表示するからです。 + +そう、データの検証は、最初に JavaScript を使ってクライアントサイドで実行され、次に PHP によってサーバーサイドで実行されます。 +[[yii\widgets\ActiveForm]] は、賢いことに、`EntryForm` で宣言した検証規則を抽出し、それを実行可能な JavaScript コードに変換して、 +JavaScript を使ってデータ検証を実行します。 +ブラウザで JavaScript を無効にした場合でも、`actionEntry()` メソッドで示されているように、サーバーサイドでの検証は実行されます。 +これにより、どのような状況であっても、データの有効性が保証されます。 + +> Warning|警告: クライアントサイドの検証は、ユーザにとってのより良い使い心地のために利便性を提供するものです。 + クライアントサイドの検証の有無にかかわらず、サーバサードの検証は常に必要とされます。 + +入力フィールドのラベルは、モデルのプロパティ名を使用して、`field()` メソッドによって生成されます。 +例えば、`name` というプロパティから `Name` というラベルが生成されます。 + +ビューの中で、下記のコードのように、ラベルをカスタマイズすることも出来ます: + +```php +field($model, 'name')->label('お名前') ?> +field($model, 'email')->label('メールアドレス') ?> +``` + +> Info|情報: Yii はこのようなウィジェットを数多く提供して、複雑で動的なビューを素速く作成することを手助けしてくれます。 + 後で学ぶように、新しいウィジェットを書くことも非常に簡単です。 + あなたは、将来のビュー開発を単純化するために、多くのビューコードを再利用可能なウィジェットに変換したいと思うことでしょう。 + + +まとめ +------ + +ガイドのこの節においては、MVC デザインパターンの全ての部分に触れました。 +そして、ユーザデータを表現し、当該データを検証するモデルクラスを作成する方法を学びました。 + +また、ユーザからデータを取得する方法と、ブラウザにデータを表示して返す方法も学びました。 +この作業は、アプリケーションを開発するときに、多大な時間を必要とするものになり得るものです。 +しかし、Yii はこの作業を非常に容易にする強力なウィジェットを提供しています。 + +次の節では、ほとんど全てのアプリケーションで必要とされるデータベースを取り扱う方法を学びます。