zfdatagrid日期格式

时间:2012-02-10 10:44:54

标签: zend-framework date zfdatagrid

我使用的是ZF 1.11,PHP 5.3,Windows和最新版本的zfdatagrid。

我用

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

将属性“birthday”显示为dd-MM-yyyy。当我单击“编辑”按钮(启用CRUD)时,此属性的值将显示为“yyyy-MM-dd”。当用户单击保存按钮时,他会收到一条错误消息(请输入日期为dd-MM-yyyy)。

如何告诉$ form将值显示为dd-MM-yyyy而不是yyyy-MM-dd?

3 个答案:

答案 0 :(得分:1)

看着码头我觉得你的代码可能有些不正确:

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

也许:

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

看起来你在日期有一个额外的数组()。

参考:

  
    

日期 ZFDatagrid将为Zend_Registry中的一个键命名     Zend_Locale并使用它。您还可以将参数作为参数传递给     Zend_Locale或具有以下选项的数组

  
     
      
  • 区域设置
  •   
  • DATE_FORMAT
  •   
  •   
     
    

$网格状> updateColumn( '场',阵列( '格式'=> '日期'));

  

答案 1 :(得分:1)

谢谢,但这并没有解决问题。实际上,我现在所做的是为crud.form_built事件添加一个事件监听器。此事件中调用的方法只是创建一个新的Zend_Validate_Date对象,并将此验证器分配给相应的zfdatagrid元素。

这确实是一个黑客,但它确实有效。实际上,zfdatagrid并不真正适用于PostgreSQL,并且手册在很多地方都很常见。

答案 2 :(得分: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有效的美国日期格式..

希望这会有所帮助.. ž。