尝试在ZF2中使用DateTime Form元素,但无法使表单有效。
$inputFilter->add(array(
'name' => 'event_datetime',
'required' => true,
'filters' => array(
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 0,
'max' => 20,
),
),
),
));
在.phtml文件中使用此功能。
<?php $formElement = $form->get('event_datetime');?>
<dt><?php echo $this->formLabel($formElement);?></dt>
<dd><?php echo $this->formDateTimeLocal($formElement);?>
<?php echo $this->formElementErrors($formElement);?>
注意:使用formDateTimeLocal而不是formDateTime,因为后者不显示HTML5元素。 使用Chrome时,HTML5 DateTimeLocal字段会显示日历和时间部分。
当运行$ form-&gt; isValid()时,我收到:(var_dump($ form-&gt; getMessages()))
array (size=1) 'event_datetime' => array (size=1) 'dateInvalidDate' => string 'The input does not appear to be a valid date' (length=44)
getRequest-&gt; getPost()= public&#39; event_datetime&#39; =&GT;字符串&#39; 2015-08-10T03:00&#39; (长度= 16)
我试图将此字段拆分为2:日期和时间字段作为单独的变量。这适用于Date BUT而不是Time元素。 阅读我已经注意到了这一点:ZF2 validating date and time format PT_BR always The input does not appear to be a valid date因为我需要时间组件而没有帮助。 (显然我看过的不仅仅是1个链接,但我的SO上的代表在帖子中只允许1个网址。) 我还读到Chrome和Opera切断了“秒”的时间。部分时间领域.... 如何验证\ Zend \ Form \ Element \ DateTime字段或只是\ Zend \ Form \ Element \ Time for field ...
我试图手动将这些粘在一起,将字符串的00秒部分添加到时间但不起作用。
如果我将输入过滤器设置为&#39; required&#39; =&GT; false我仍然收到针对尝试的dateInvalidDate验证器:DateTime和Time ...
所以,问题是:
如何使用Zf2表单元素和inputFilters验证DateTime或Time字段。在文档和示例之后似乎不适合我,手动创建时间字符串也有同样的问题。
答案 0 :(得分:1)
试试这个:
create or replace procedure t1_d12
as
b int :=0;
p test_divs%rowtype;
cursor test is select * from test_divs order by id;
begin
for p in test
loop
if p.gender = 'M' then
b :=p.age+b;
elsif p.gender = 'F' then
b :=b-p.age;
end if;
dbms_output.put_line(b);
update test_divs set balance = b where id=p.id;
end loop;
您收到错误,因为您传递的日期时间字符串/格式默认情况下与预期的日期时间格式不同。尝试使用$inputFilter->add(array(
'type' => 'Zend\Form\Element\DateTimeLocal',
'name' => 'event_datetime',
'required' => true,
'options' => array(
'label' => 'Appointment Date',
'format' => 'Y-m-d\TH:i'
),
'filters' => array(
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 0,
'max' => 20,
),
),
),
));
来获得结果。
直接来自Zend documentation。它完全相同,但有不同的元素。
'format' => 'Y-m-d\TH:i'
答案 1 :(得分:0)
我原来的问题是验证。 Stanimir的建议确实有所帮助,而dateTimeLocal格式在指向正确的方向上非常有用。 整个问题是“格式”值。
我的主要问题是填充\ Zend \ Form \ Element \ Time字段时格式为H:i:s但HTML5表单只提交了H:i。 (也是由于我的'格式'设置可以) 因此,当填充表单时,DB字段返回H:i:s正确填充表单但提交失败如果我没有编辑时间字段。
因此:这个问题的答案基本上是确保提交的格式[和$ form-&gt; bind($ object),$ form-&gt; setData($ post)等]与表单元素完全相同定义[H:i!= H:i:s]以及从数据库格式中提取以符合您所需的设置。
var_dump($form->get('valid_to_time')->getFormat());
var_dump($form->get('valid_to_time')->getValue());
一旦这是相同的,一切都会好,您可以将DateTime字段拆分为单独的日期和时间(或使用上面的DateTime)。 听起来很简单,但这是一个令人头疼的问题。