3

我正在尝试email在 Zend Forms 中创建一个类型的输入,但我无法完成所需的结果。

我创建了一个自定义类:

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参数。

我已经设置了 HTML5 文档类型($documentType = new Zend_View_Helper_Doctype(); $documentType->doctype('HTML5');Bootstrap.php中),我也试过这个:

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

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

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

4

1 回答 1

3

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

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

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

  • 从元素中移除ViewHelper装饰器并使用ViewScript助手渲染元素。
  • 使您自己的视图助手formEmail几乎与formText输出相同type="email";并将$helperElement 类中的公共属性设置为formEmail. 您必须使用注册formEmail助手的路径,以便装饰器Zend_View::addHelperPath()可以找到它。ViewHelper
于 2012-07-08T21:33:00.477 回答