在Zend 2中为日期输入添加占位符属性

时间:2015-07-01 12:05:00

标签: php html zend-framework zend-framework2

我想在我的日期输入中添加占位符,以使用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类实现的目标?

3 个答案:

答案 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元素视图助手并使用它。