2009年7月30日木曜日

 

【symfony】_csrf_tokenとsetWidgets()

嵌ったので記録。

フォームでカラム「user_id」を「setWidgets()」で「hidden」にした。

/* lib/form/doctrine/MyModuleForm.class.php 修正前 */
class MyModuleForm extends MyModuleForm
{
  public function configure()
  {
    $this->setWidgets(array(
      'user_id' => new sfWidgetFormInputHidden(),
      'name' => new sfWidgetFormInput(),
      'email' => new sfWidgetFormInput(),
    ));
    ~(略)~
   }
}

そしたらフォームの値が上手く渡らなくなった。空っぽ。「$request」にはあるのに「$form」に渡ってない、validationで全部「Required」エラー。CSRFトークンまでエラーが出た。
Actionの書き方が悪いのか「processForm()」か、テンプレートか「routing.yml」かとあれこれ四苦八苦。
次の様に修正。

/* lib/form/doctrine/MyModuleForm.class.php 修正後 */
class MyModuleForm extends MyModuleForm
{
  public function configure()
  {
    $this->widgetSchema['user_id'] = new sfWidgetFormInputHidden();
    $this->widgetSchema['name'] = new sfWidgetFormInput();
    $this->widgetSchema['email'] = new sfWidgetFormInput();

    ~(略)~
   }
}

setWidgets()」に記述してないフォームはリセットされるからだと思う。
setWidgets()」でフォーム要素のWidgetを定義がないカラムは、フォーム画面で存在しないので気付くのだが、CSRFトークンは「<input name="my_module[_csrf_token]" type="hidden" >」としてあったのでこのような事態に陥ってしまった。
自動の便利なヘルパーに足元を掬われた様な。

ラベル:


コメント: コメントを投稿

登録 コメントの投稿 [Atom]



この投稿へのリンク:

リンクを作成



<< ホーム

This page is powered by Blogger. Isn't yours?

登録 投稿 [Atom]

Google