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)。

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

4

3 回答 3

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')));

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

参考:

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

  • 语言环境
  • 日期格式
  • 类型

$grid->updateColumn('field',array('format'=>'date')) ;

于 2012-02-10T13:26:46.033 回答
1

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

这确实是一个 hack,但它确实有效。实际上,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 有效的美国日期格式..

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

于 2012-08-23T12:36:53.657 回答