これがsymfony 1.1だ
一新されたフォーム
さて、作成したモジュールにロジックを組み込もうとすると、symfony 1.1の最大の変更点であるフォームの実装でつまずくと思います。例えば、「」のようにformタグを出力しようとしてみます。
そうすると、「form_tag関数がない」というエラーが表示されます。これはバージョン1.1ではフォームの作成方法が異なることが原因です。これを回避するためには、新しいフォームの仕組みを使用するか、symfony自体に互換性を持たせる必要があります。
まず1つ目の新しいフォームの仕組みについて見てみましょう。この新しいフォームの仕組み(フォームフレームワーク)は、symfony 1.1の目玉の1つとなっており、開発陣はかなりの自信を持っているようです。
今までのフォームはFormヘルパーに含まれるinput_tagなどの関数をテンプレート内で使用していましたが、フォームフレームワークではそれらの情報がすべてクラスにまとめられます。そのクラスの中にinput_tagなどの関数群に変わるウィジェットを定義していき、フォームを生成するという流れになります。
フォームフレームワークを利用するために、Propelのタスクにモデルに対応したフォームクラスを生成するpropel:build-formが追加されています。このコマンドを実行すると、1つのモデルに対して2つのクラスが生成されます。例えば、symfonyのチュートリアルMy First Projectでも使用されているpostテーブルの場合、図2に示すようにPostFormとBasePostFormが生成されます。
CSRF攻撃を防ぐ機能も用意
この継承関係はPropelのモデルと同様に、コマンドで更新されるBasePostFormは編集せずに、PostFormを編集するという関係になっています。このフォームクラスを使用することで、propel:generate-crudタスクではフォームを作成しています。
また、フォームの変更に伴いyamlとアクション内に記述していたバリデーションは、フォームクラスの中で行うようになりました。そのため、validateXXXとhandleErrorXXXメソッドは不要となります。後で紹介する互換性を有効にしておかないと、例外を投げてしまうので注意してください。
より詳しく知りたい方は、PropelのジェネレータでCRUDモジュールを作成してみるのが一番です。まずは、本家サイトのチュートリアル「My First Project(http://www.symfony-project.org/tutorial/1_1/my-first-project)」を見てください。すでにsymfonyを使用している人であれば、コマンドだけ追っていけば雰囲気はつかめると思います。
さらに、デフォルトでは無効ですがCSRF(Cross Site Request Forgeries)攻撃を防ぐ機能が追加されています。その機能を有効にするには、apps/frontend/config/settings.ymlのcsrf_secretに適当な文字列を設定するだけです。そうすれば、propel:generate-crudで作成したモジュールはフォーム生成の度にチケットを生成し、POSTされた際にチケットの比較が行われます。
独自でフォームクラスを作成する方法については、symfony-devsというGoogle Groupでの質問(http://groups.google.co.jp/group/symfony-devs/browse_thread/thread/5ecfb8579b2ba5c1/0f9cfed99f4888ba?lnk=gst&q=+the+new+form+widgets#0f9cfed99f4888ba)や、その中で言及されている海外のブログ記事(http://notjosh.com/blog/archives/47-Symfony-1.1-Forms-and-Validation.html)が詳しいので参照してください。
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- フォームフレームワークを使おう!
- 15分でプロセスアプリケーションの開発
- symfony 1.1にアップグレードしよう!
- Phalcon Devtoolsを使ったMVCプロジェクト作成からHelloWorldまで
- フレームワークを便利にするプラグイン!
- RancherのCatalog機能を詳細に見てみる
- HelmfileでKubernetesマニフェストやKustomization、Helm Chartなどで構成されるアプリケーションを効率的に管理する
- セキュアなWebアプリケーションについて
- フレームワークのススメ
- 「TAURI」の基礎知識を押さえ、簡単なTAURIアプリ開発を体験してみよう