symfony1.4.9で、sfWidgetFormDateの挙動が変

2011年3月17日 オフ 投稿者: KYO
Table of Contents

仕様なのかどうか。。
深追いするのも面倒なので、回避方法のみ記載。
やりたかったのは、「日付フィールド(DBでDATE型、schemaではVARCHAR)に、デフォルト値(アクセス日)を指定」したかった。

同じようにはまった人もいたようだけど、解決はしてなさそう。

 

イメージしやすいように、やや前置き。

【前提条件】

  • _form.phpを流用するので、新規(new)と編集(edit)が混在する
  • 新規レコード追加(new)の場合は、そのアクセス日を設定したい
  • 編集(edit)の場合は、 そのままレコードの値を使う
  • テンプレートには、デフォルト値は特に指定したくない(結果:このポリシーを曲げることになる)
  • 出来れば、action内からformオブジェクトのdefault値を設定したい


いろいろと調べた結果・・・

以下であれば、前提条件の1つを除き可能となった。

[shell]
$ vim lib/form/Xxx.class.php
...
$this->setWidgets(array(
'no'        => new sfWidgetFormInputText(),
'date_at'   => new sfWidgetFormDate(array(
'format'    => $date_format,
'years'     => array_combine($years, $years)
)));
$this->setDefault('date_at', date('Y/m/d'));

 

【試してNGだったこと】

  • actionから、getWidget()を利用してアクセス ーーー default値だけがセット出来ない
$widget = $this->form['date_at']->getWidget();
$widget->setDefault('2020/2/2'); // NG
$widget->setOption('default', '2020/2/2'); //NG
$widget->setOption('label', 'label'); //OK
$widget->setOption('format', 'Y/m/d/'); //OK