利用 ZF2 + Doctrine 2 的项目。
我尝试了多种格式。我正在使用未经验证的表单。
我最后一次尝试是:
$traindate = new Element\DateTime('trainDate');
$traindate->setAttributes(array(
'name' => 'trainDate',
'id' => 'trainDate',
'size' => '30',
'class' => 'datepicker',
'options' => array(
'label' => '',
'format' => 'd-m-Y H:i'
),
));
我需要使用输入来设置事件的日期和时间。在巴西,基本格式是: 2014年5月14日 14:20 2015年5月15日 15:00
With 意味着天、月、年、小时、分钟,就像我在选项 -> 格式中表达的那样。
这样,当我尝试插入时,我总是会收到以下消息: 输入的日期似乎无效
删除格式后,我只能通过 Y-m-d (美国格式)通过 $form->isValid($data),但是顺便说一句,我也无法通过 date 时间,这给我带来了很大的麻烦。
我需要在表单/输入上设置日期 PT_BR,通过验证,将数据转换为 Mysql 格式(YYYY-mm-dd HH:ii:ss)。 然后从数据库检索并转换回 pt_br 格式。
但即使我也无法将带有日期的时间传递到 zf2 表单,永远不会出现此错误消息。
我从该表单中删除了所有过滤器,试图获得工作,但不起作用。
主要问题在哪里?
最佳答案
经过很长时间的关注这个问题,我找到了正确且快速的解决方案。 经过 6 个月的科学研究,我得到了:
<小时/>对了:
$traindate = new Element\DateTime('trainDate');
$traindate->setAttributes(array(
'name' => 'trainDate',
'id' => 'trainDate',
'size' => '30',
'class' => 'datepicker',
));
$traindate->setFormat('d/m/Y'); //ONLY WORKS ON THIS FORMAT.
文档和互联网上的人没有说清楚,但设置格式仅适用于此表单。
要将其获取到实体,您需要编写自己的 Hydrator 来扩展 DoctrineHydrator:
namespace Application\Hydrator;
use DoctrineModule\Stdlib\Hydrator\DoctrineObject;
class MyCustomHydrator extends DoctrineObject {
protected function handleTypeConversions($value, $typeOfField)
{
if($typeOfField == 'datetime'){
return \DateTime::createFromFormat('d/m/Y', $value);
}
return parent::handleTypeConversions($value, $typeOfField);
}
}
它使使用任何日期格式变得简单。您可以根据需要进一步扩展在此自定义水化器上进行区域设置断言。
关于php - ZF2 始终验证日期和时间格式 PT_BR 输入似乎不是有效日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23666296/