フォームフレームワークを使おう!
フォームフレームワークの使い方を覚えよう
今回は、第1回で簡単に触れたフォームフレームワークをより詳しく紹介したいと思います。
フォームフレームワークは開発に必須の機能であり、symfony 1.1を使うのであれば、使用方法を覚える必要があります。また新しく覚えることが増えてしまいますが、symfony 1.1を使うのであれば、避けては通れない道です。
第1回では、propel:generate-crudタスクでサンプルとなるスクリプトが生成されることを紹介しただけでしたが、その中身を少し詳しくみていきましょう。まずは、My First Projectチュートリアル(http://www.symfony-project.org/tutorial/1_1/my-first-project)にあるようにpostとcommentテーブルを作成し、frontnedアプリケーションにpost、commentというモジュールを作成しています。
propel:generate-crudで作成したpostモジュールのアクションファイルを見てみると、symfony 1.0とかなり違うことがわかるでしょう。大きな変更点をいくつか以下に挙げます。
1. listアクションの役割がindexアクションになった
2. showアクションが削除された
3. editとcreateアクションがフォームフレームワークを使用して実装されている
4. $requestを引数にとっている
1と2は画面遷移の変更点です。3については以降で詳しく紹介します。ここでは4について簡単に触れたいと思います。symfony 1.1のアクションではリクエストオブジェクトを引数にとることができます。また、バリデーションやエラー処理のメソッドがアクションから廃止されたことによって、常にアクションのpreExecute()メソッドとpostExecute()メソッドが呼ばれるようになったなどの変更点もあります。
それでは、3のeditとcreateアクションの中身について見ていきましょう。フォームフレームワークを使用したアクションの流れは以下のようになります。
1. フォームクラスのインスタンスをテンプレートに割り当て表示する
2. POSTデータをフォームクラスに渡してバリデーションを実行する(bindメソッド)
3. エラーがないかどうかをチェックする(isValidメソッド)
4.1. バリデーションエラーの場合はeditアクションのテンプレートを表示する
4.2. バリデーションで問題がない場合は、リダイレクトする
1がcreate、editアクションで、2以降がupdateアクション内に実装されています。フォームクラスを使用する場合はソースコードは図1のように変える必要があります。
フォームフレームワークを使用したテンプレート
次に、この新しいフォームオブジェクトがテンプレートでどのように使用されるのかを見てみましょう。
テンプレート(templates/editSuccess.php)を見てみると、以前とは完全に異なる書き方をしていることがわかると思います。まずformタグの出力方法からして異なります。
Formヘルパーでの記述方法は以下のようになります。
フォームフレームワークでの記述方法は以下のようになります。