Zend HTML5表单元素类型

| 有没有简单的方法可以将HTML5表单元素转换为Zend表单? createElement(\'tel \',\'phone \');只是不起作用,因为zend不支持html5表单元素,但看来...创建type属性后就无法覆盖它。 例如。我需要在zend表单上输入type = \“ tel / email / date / number \”等。     
已邀请:
        没关系,我发现了这篇文章:http://www.enrise.com/2010/12/html5-zend-framework-form-elements/。我只需要将他的代码复制到我的MVC架构中即可使用。除非我必须在$ Number.php中放入$ this-> setAttrib(\'type \',\'number \')例如,因为除非在控制器中设置了选项,否则它不会添加选项。愚蠢的,因为我正在创建一个新的Glitch_Form_Element_Text_Number或其他o_O。     
        本诺 为使Glitch正常工作,我做了以下工作:(Zend Framework 1.11) 在我的Controller init()函数中 // someController扩展Zend_Controller_Action
public function init(){
    $this->view->addHelperPath(\'Glitch/View/Helper\', \'Glitch_View_Helper_\');
}
然后在我的元素创建中,我只需用attrib(\'type \',\'email \')覆盖类型
public function getEmailField(){
     $element = new Zend_Form_Element_Text(\'email\');
     $element->setLabel(\'Email\');
     $element->setAttrib(\"type\", \"email\");
     $element->setRequired();

     return $element;
}
如果不设置视图助手,则输入将更改为“文本”。 谢谢!     
        我创建了一个文章,该文章显示了如何最好地使用Enrise HTML5表单元素,重申了需要指定HTML5文档类型的事实。     
        这是我为解决XML5元素所做的工作。 首先,我在以下库中创建了一个自定义表单元素:library / Custom / Form / Element / Html5.php
    <?php

    /** Zend_Form_Element_Xhtml */
    require_once \'Zend/Form/Element/Xhtml.php\';


    class Custom_Form_Element_Html5 extends Zend_Form_Element_Xhtml
    {
        public $helper = \'formHtml5\';
    }
然后,我在以下库中创建了一个自定义视图助手:library / Custom / View / Helper / FormHtml5.php
    <?php


    /**
    * Abstract class for extension
    */
    require_once \'Zend/View/Helper/FormElement.php\';


    /**
    * Helper to generate an \"Html5\" element
    *
    */
    class Custom_View_Helper_FormHtml5 extends Zend_View_Helper_FormElement
    {

        public function formHtml5($name, $value = null, $attribs = null)
        {
            $info = $this->_getInfo($name, $value, $attribs);
            extract($info); // name, value, attribs, options, listsep, disable

            // build the element
            $disabled = \'\';
            if ($disable) {
                // disabled
                $disabled = \' disabled=\"disabled\"\';
            }

            // XHTML or HTML end tag?
            $endTag = \' />\';
            if (($this->view instanceof Zend_View_Abstract) && !$this->view->doctype()->isXhtml()) {
                $endTag= \'>\';
            }

            $xhtml = \'<input\'
                    . \' type=\"\' . (($attribs[\'type\'])?($this->view->escape($attribs[\'type\'])):\'text\') . \'\"\'
                    . \' name=\"\' . $this->view->escape($name) . \'\"\'
                    . \' id=\"\' . $this->view->escape($id) . \'\"\'
                    . \' value=\"\' . $this->view->escape($value) . \'\"\'
                    . $disabled
                    . $this->_htmlAttribs($attribs)
                    . $endTag;

            return $xhtml;
        }
    }
然后在表单中添加以下内容:         
    class Application_Form_UserBasic extends Zend_Form
    {

        public function init()
        {
             // this will tell zf to look for custom helpers on your custom library
             $view = $this->getView();
             $view->addHelperPath(APPLICATION_PATH.\'/../library/Custom/View/Helper/\', \'Custom_View_Helper\');

             /* Some other code */

             $email      = new Custom_Form_Element_Html5(\'email\');
             $email->setAttribs(array( \'type\' => \'email\'));

             /* Your other elements*/

             $this->addElements(array(
                  $email, /* your other elements */
             ));
        }
    }
如果没有这样做,请不要忘记将此行添加到application.ini文件中:
    autoloaderNamespaces[] = \"Custom_\"
希望对您有所帮助。     
        由于没有“开箱即用”的解决方案,所以我自己写了它,并制作了一个作曲家程序包以便于分发。 如果您使用作曲家,则可以使用它https://github.com/Alez/html5input 在控制台编辑器中输入require alez / html5input 在表单类中,只需使用\“ type \”属性创建一个实例Html5Input_Element_AnyType或使用\6ѭ将其\“ type \”属性设置为所需的任何内容。这是它与Zend_Form_Element_Text之间的唯一区别,您可以将其视为简单的文本元素。 示例代码:
class My_Form extends Zend_Form
{
    public function init()
    {
        $email = new Html5Input_Element_AnyType(\'email\', array(
            \'type\' => \'email\',
        ));

        $this->addElement($email);
    }
}
    

要回复问题请先登录注册