Zend Forms电子邮件元素更改为文本

时间:2012-07-08 11:55:02

标签: php html5 zend-framework zend-form

我正在尝试在Zend Forms中创建类型email的输入,但我无法达到预期的结果。

我已经创建了一个自定义类:

namespace AAA\Forms\Elements;

class Email extends \Zend_Form_Element_Text
{
    function __construct($name, $label, $required)
    {
        parent::__construct($name);
        $this->setAttrib('type', 'email');
        $this->setLabel($label)->setRequired($required);
    }
}

然后我就像这样使用它:

class Application_Form_Register extends Zend_Form
{
    public function init()
    {
        // …
        $email = new AAA\Forms\Elements\Email('email', 'E-mail:', true);
        $this->addElement($email);
        // …
    }
}

我得到的是:

<input type="text" name="email" id="email" value="" type="email">

请注意两个type参数。

我在 Bootstrap.php 中设置了HTML5 doctype($documentType = new Zend_View_Helper_Doctype(); $documentType->doctype('HTML5');),我也试过了:

function __construct($name, $label, $required)
{
    $options = array();
    $options['type'] = 'email';
    parent::__construct($name, $options);
    // …
}

我看过Zend HTML5 Form element types,但没有一个答案有用。我也尝试过Glitch库但结果是一样的。

任何人都知道如何强制Zend Framework使用HTML5表单控件?

1 个答案:

答案 0 :(得分:3)

您还需要实现自己的视图助手来呈现电子邮件表单元素。

Zend_Form_Element_Text使用formText视图助手(Zend/View/Helper/FormText.php)来呈现HTML输入,并且在呈现元素时输出<input type="text"是硬编码的。

处理此问题的两种可能方法是:

  • 从元素中删除ViewHelper装饰器,并使用ViewScript帮助器渲染元素。
  • 让自己的助手formEmailformText几乎完全相同,只是输出type="email";并将Element类中的公共$helper属性设置为formEmail。您必须使用formEmail注册Zend_View::addHelperPath()帮助程序的路径,以便ViewHelper装饰器找到它。