我正在尝试在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表单控件?
答案 0 :(得分:3)
您还需要实现自己的视图助手来呈现电子邮件表单元素。
Zend_Form_Element_Text
使用formText
视图助手(Zend/View/Helper/FormText.php
)来呈现HTML输入,并且在呈现元素时输出<input type="text"
是硬编码的。
处理此问题的两种可能方法是:
ViewHelper
装饰器,并使用ViewScript
帮助器渲染元素。formEmail
与formText
几乎完全相同,只是输出type="email"
;并将Element类中的公共$helper
属性设置为formEmail
。您必须使用formEmail
注册Zend_View::addHelperPath()
帮助程序的路径,以便ViewHelper
装饰器找到它。