一新されたフォーム

一新されたフォーム

 さて、作成したモジュールにロジックを組み込もうとすると、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)が詳しいので参照してください。

この記事のキーワード :

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30