我想在我的日期输入中添加占位符,以使用firefox显示访问者,日期必须具有这种格式 使用Zend Framework 2,我希望能够生成相当于:
的输入<input type="date" placeholder="yyyy-mm-dd">
在我的Form类中 这是我现在的Form类:
<?php
namespace MyModule\Form;
use Zend\Form\Form;
class MyModuleForm extends Form {
public function __construct($name = null) {
parent::__construct('myModule');
$this->add(array(
'name' => 'TheDate',
'type' => 'date',
'attributes' => array(
'placeholder' => 'yyyy-mm-dd',
'class' => 'form-control',
)
));
}
}
?>
但Zend似乎跳过了“占位符”属性并仅生成:
<input class="form-control" type="date" value="" name="TheDate">
在最糟糕的情况下,我知道我也可以解除“值”属性(虽然我不愿意,以防万一用户不注意并且不改变它),或者添加使用javascript手动占位符。但是有没有更优雅的方式来做我想通过Zend的Form类实现的目标?
答案 0 :(得分:1)
编辑:我从一开始就找到了我正在寻找的答案,感谢this post。
解决方案是进入名称空间Zend \ Form \ View \ Helper中的AbstractHelper.php。
在那里,有一个受保护的属性数组应该是全局有效的。
添加
'placeholder' => true,
到$ validGlobalAttributes修复了所有内容,这对我来说是一个很好的回答 更好的方法是通过继承更改此变量,而不是将其修改为框架,但我现在没有足够的时间。
答案 1 :(得分:0)
由于UI是在焦点上触发的,因此您无法在日期输入中添加占位符。因此,你必须破解/伪造它。
将'type' => 'date',
更改为'type' => 'text',
。您现在将看到占位符。此Javascript将帮助您触发焦点上的日期字段,并保留占位符。
$('.form-control').on('focus', function() {
$(this).attr('type', 'date') }
).on('blur', function() {
$(this).attr('type'), 'text') }
)
答案 2 :(得分:0)
我猜,Zend FormDate不支持占位符。您可以在回购时查看此信息。例如,
每个表单元素都有一个帮助器(Zend\Form\View\Helper
),其中一些有validTagAttributes
作为类元素。您可以检查FormEmail查看帮助程序类。
但是,FormDate没有validTagAttributes
。因此,prepareAttributes()
方法中忽略了您的无效属性。
我认为,如果你想在你的日期表单元素上持有掌上电脑,你可以创建一个自定义的FormDate元素视图助手并使用它。