PR

これがsymfony 1.1だ

2008年5月12日(月)
森川 穣

一新されたフォーム

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

アシアル株式会社
大学4年時にアシアル株式会社にアルバイトとして入社。そこで初めてPHP言語でのプログラミングを覚え、会社に深く参画していく。大学卒業後は東京大学大学院を中退し、今に至る。アシアルでは、CTOとして、最新技術の探求/応用や、ワークショップやセミナーでの講演も行っている。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています