将占位符属性添加到 Zend 2 中的日期输入
Add placeholder attribute to date input in Zend 2
我想在我的日期输入中添加一个占位符,以向使用 firefox 的访问者显示日期必须具有的格式。
使用 Zend Framework 2,我希望能够生成相当于 :
的输入
<input type="date" placeholder="yyyy-mm-dd">
在我的表单中 class。
这是我现在拥有的表格 class :
<?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 似乎跳过了 "placeholder" 属性并只生成 :
<input class="form-control" type="date" value="" name="TheDate">
在最坏的情况下,我知道我也可以定义 "value" 属性(尽管我不想这样做,以防万一用户不注意并且不更改它) ,或使用 javascript 手动添加占位符。但是有没有更优雅的方式来完成我想通过 Zend 的 Form class 实现的目标?
由于焦点触发的 UI,您不能在日期输入中使用占位符。因此你必须hack/fake它。
将 'type' => 'date',
更改为 'type' => 'text',
。您现在将看到占位符。 Javascript 将帮助您触发焦点上的日期字段,并保留占位符。
$('.form-control').on('focus', function() {
$(this).attr('type', 'date') }
).on('blur', function() {
$(this).attr('type'), 'text') }
)
编辑:感谢 this post。
我找到了从一开始就在寻找的答案
解决方案是进入命名空间 Zend\Form\View\Helper 中的 AbstractHelper.php。
这里有一个受保护的属性数组,应该在全局范围内有效。
添加
'placeholder' => true,
$validGlobalAttributes 修复了所有问题,这对我来说是一个足够好的答案。
更好的方法是通过继承来改变这个变量,而不是将其修改到框架中,但我现在没有足够的时间。
我猜,Zend FormDate 不支持占位符。你可以在 repo 上查看这个。例如,
每个表单元素在 (Zend\Form\View\Helper
) 中都有一个 Helper,其中一些有 validTagAttributes
作为 class 元素。您可以为此查看 FormEmail 查看助手 class。
但是,FormDate dont have a validTagAttributes
. So, your invalid attributes ignored in prepareAttributes()
方法。
我想,如果你想在你的日期表单元素上占位符,你可以创建一个自定义的 FormDate 元素视图助手并使用它。
我想在我的日期输入中添加一个占位符,以向使用 firefox 的访问者显示日期必须具有的格式。
使用 Zend Framework 2,我希望能够生成相当于 :
<input type="date" placeholder="yyyy-mm-dd">
在我的表单中 class。
这是我现在拥有的表格 class :
<?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 似乎跳过了 "placeholder" 属性并只生成 :
<input class="form-control" type="date" value="" name="TheDate">
在最坏的情况下,我知道我也可以定义 "value" 属性(尽管我不想这样做,以防万一用户不注意并且不更改它) ,或使用 javascript 手动添加占位符。但是有没有更优雅的方式来完成我想通过 Zend 的 Form class 实现的目标?
由于焦点触发的 UI,您不能在日期输入中使用占位符。因此你必须hack/fake它。
将 'type' => 'date',
更改为 'type' => 'text',
。您现在将看到占位符。 Javascript 将帮助您触发焦点上的日期字段,并保留占位符。
$('.form-control').on('focus', function() {
$(this).attr('type', 'date') }
).on('blur', function() {
$(this).attr('type'), 'text') }
)
编辑:感谢 this post。
我找到了从一开始就在寻找的答案解决方案是进入命名空间 Zend\Form\View\Helper 中的 AbstractHelper.php。
这里有一个受保护的属性数组,应该在全局范围内有效。
添加
'placeholder' => true,
$validGlobalAttributes 修复了所有问题,这对我来说是一个足够好的答案。
更好的方法是通过继承来改变这个变量,而不是将其修改到框架中,但我现在没有足够的时间。
我猜,Zend FormDate 不支持占位符。你可以在 repo 上查看这个。例如,
每个表单元素在 (Zend\Form\View\Helper
) 中都有一个 Helper,其中一些有 validTagAttributes
作为 class 元素。您可以为此查看 FormEmail 查看助手 class。
但是,FormDate dont have a validTagAttributes
. So, your invalid attributes ignored in prepareAttributes()
方法。
我想,如果你想在你的日期表单元素上占位符,你可以创建一个自定义的 FormDate 元素视图助手并使用它。