トップ  > symfony  > フォーム  > 記事

No.1978 sfForm(BaseForm)派生クラス内でのsetup()やconfigure()についてのメモ

sfForm(BaseForm)派生クラス内でのsetup()やconfigure()についてのメモ

sfFormの派生クラス、例えばモデルクラスに対応するフォームクラスなどで、setup() メソッドが使われています。Base~というクラスの setup() メソッドにデフォルトウィジェットなどが定義され、このクラスを継承するクラスの configure() メソッドでウィジェットカスタマイズしたりできます。

また、setup() メソッドの末尾には parent::setup() の呼び出しがあるので、BaseForm クラスに setup() メソッドを追加することで、すべてのフォームに共通する処理を記述することができます。


しかし、多少のルールを知っておかないと、意図したように処理されません。


setup()→configure()の順番

この順で呼び出されます。


$this->setWidgets() や $this->setValidators() はすべてを書き換える

これらのメソッドの実装コードを見ると分かりますが、それぞれウィジェットスキーマオブジェクト、バリデータースキーマオブジェクトが新規にインスタンス化され、既存のものと置き換わります。

つまり、このメソッドを呼ぶ以前にウィジェットスキーマオブジェクトに対して設定していた情報は失われるということです。

例:

  • Base~のsetup()メソッド内で、$this->setWidgets()を利用してウィジェットが設定されていて、派生クラスにもsetup()メソッドを定義して、i18n辞書を適用する場合:
<?php
  public function setup()
  {
    parent::setup();
    $this->widgetSchema->getFormFormatter()->setTranslationCatalogue('sf_guard');
  }

↑のコードだと設定が正しく反映されますが、

<?php
  public function setup()
  {
    $this->widgetSchema->getFormFormatter()->setTranslationCatalogue('sf_guard');
    parent::setup();
  }

↑のコードだと、設定が反映されません。親クラスのsetup()メソッドで、一旦ウィジェットスキーマオブジェクトが破棄されてしまうためです。

引用元

更新:2010/01/10 13:47 カテゴリ: symfony  > フォーム ▲トップ

FuelPHP

Mac

フロントエンド開発

web開発

プロマネ

マネタイズ

プレゼン

webサービス運用

webサービス

Linux

サーバ管理

MySQL

ソース・開発

svn・git

PHP

HTML・CSS

JavaScript

ツール, ライブラリ

ビジネス

テンプレート

負荷・チューニング

Windows

メール

メール・手紙文例

CodeIgniter

オブジェクト指向

UI・フロントエンド

cloud

マークアップ・テキスト

Flash

デザイン

DBその他

Ruby

PostgreSQL

ユーティリティ・ソフト

Firefox

ハードウェア

Google

symfony

OpenPNE全般

OpenPNE2

Hack(賢コツ)

OpenPNE3

リンク

個人開発

その他

未確認

KVS

ubuntu

Android

負荷試験

オープンソース

社会

便利ツール

マネー

Twig

食品宅配

WEB設計

オーディオ

一般常識

アプリ開発

Python

サイトマップ

うずら技術ブログ

たませんSNS

rss2.0