1

ZF 1.11、PHP 5.3、Windows、および zfdatagrid の最新バージョンを使用しています。

私が使う

$grid->updateColumn('birthday', array('format'=> array('date',array('date_format' => 'dd-MM-yyyy'))));

属性「誕生日」を dd-MM-yyyy として表示します。[編集] ボタン (CRUD が有効) をクリックすると、この属性の値が「yyyy-MM-dd」と表示されます。ユーザーが保存ボタンをクリックすると、エラー メッセージが表示されます (日付を dd-MM-yyyy として入力してください)。

値を yyyy-MM-dd ではなく dd-MM-yyyy として表示するように $form に指示するにはどうすればよいですか?

4

3 に答える 3

1

ありがとう、しかしそれは問題を解決しません。実際、私が今行ったことは、crud.form_built イベントのイベント リスナーを追加することです。このイベントで呼び出されるメソッドは、単純に新しい Zend_Validate_Date オブジェクトを作成し、このバリデータを対応する zfdatagrid 要素に割り当てます。

これは確かにハックですが、機能します。実際、zfdatagrid は PostgreSQL では実際には動作せず、マニュアルは多くの場所で正しくありません。

于 2012-02-12T18:38:13.800 に答える
0

!警告英語が悪いかもしれません!

つまり、フォームの「ローカライズされた」値は、このようなことをします。

フォームをグリッドに渡した後$grid->setForm($myform);

しかし、の呼び出しの前に$grid->deploy();

フォーム要素を取得し、次のように手動で値を設定します

$Form=$grid->getForm(1); 

$dateVal = $Form->getElement('birthday')->getValue();

if(Zend_Date::isDate($dateVal,'yyyy-MM-dd', 'en'))   
   $dateObject = new Zend_Date($dateVal);

$Form->getElement('birthday')
     ->setValue($dateObject->toString('dd.MM.yyyy'))
     ->setValidators(array(new Zend_Validate_Date('dd.MM.yyyy')))
     ;

次に、zfdatagridイベントトリガー「crud.before_update」を登録します

$grid->listenEvent('crud.before_update', array($this, '_updateCallback')

このコントローラーから関数を呼び出す_updateCallback()このようなカスタムの何かで

public function _updateCallback(Bvb_Grid_Event $e) 
{       
   $n = $e->getParam('newValues');
   list($d,$m,$y) = explode('.', $n['birthday']);       
   $sqldate = $y.'-'.$m.'-'.$d;     
   $n['birthday'] = $sqldate;

   $e->setParam('newValues', $n);
}

または、前と同じようにZend Dateを使用して日付をリファクタリングし、保存する日付値がsqlで有効な米国の日付形式であることを確認します。

これがお役に立てば幸いです。

于 2012-08-23T12:36:53.657 に答える