【问题标题】:Zend Framework: Insert DIV and Image in my formZend 框架:在我的表单中插入 DIV 和图像
【发布时间】:2023-04-06 22:36:01
【问题描述】:

我需要在我的 zend 表单中插入这样的 html 代码:

<div class="myClass1" id="myId1" style="display: none;"><img src="images/myImage.jpg" /></div>

上面的html代码在zend框架中的代码是什么。我尝试使用 Create_Element,但它总是在 div 标签内创建一个按钮。请给出示例代码。谢谢

【问题讨论】:

    标签: zend-framework zend-form


    【解决方案1】:

    您可以使用 'note' 元素类型通过将标记作为元素的值传递来添加 html。

    【讨论】:

      【解决方案2】:

      我通常使用带有 array(escape => false) 选项的描述来以表单形式呈现 HTML。

      【讨论】:

        【解决方案3】:

        你考虑过表单 ViewScript 吗?见this discussion

        【讨论】:

          【解决方案4】:

          我创建了一个名为“html”的自定义元素。我将 Html.php 添加到 /Form/Element:

          /** Zend_Form_Element_Xhtml */ require_once 'Zend/Form/Element/Xhtml.php'; /** * HTML form element * */ class Zend_Form_Element_Html extends Zend_Form_Element_Xhtml { /** * Default form view helper to use for rendering * @var string */ public $helper = 'formHtml'; }

          其次,我必须添加一个视图助手 FormHtml.php(我把它放在 application/views/helpers 中):

          /** * Abstract class for extension */ require_once 'Zend/View/Helper/FormElement.php'; /** * Helper to show HTML * */ class Zend_View_Helper_FormHtml extends Zend_View_Helper_FormElement { /** * Helper to show a html in a form * * @param string|array $name If a string, the element name. If an * array, all other parameters are ignored, and the array elements * are extracted in place of added parameters. * * @param mixed $value The element value. * * @param array $attribs Attributes for the element tag. * * @return string The element XHTML. */ public function formHtml($name, $value = null, $attribs = null) { $info = $this->_getInfo($name, $value, $attribs); extract($info); // name, value, attribs, options, listsep, disable // Render the button. $xhtml = 'view->escape($id) . '">' . $this->_htmlAttribs($attribs) . $this->view->escape($value) . ''; return $xhtml; } }

          然后您可以将 html 添加到您的表单中,如下所示:

          $form->createElement('html', 'someid', array('value'=>'gna

          foobar

          '));

          可能还有更多的简化。

          【讨论】:

          • 感谢您的回答。它帮助了我。
          【解决方案5】:

          如果您正在创建表单元素,我认为您必须重写 isValid() 方法,如下面的代码所示,否则您的“值”将在验证错误时消失:

          class RenomoZF_Form_Element_Note extends Zend_Form_Element_Xhtml
          {
              /**
               * Default form view helper to use for rendering
               * @var string
               */
              public $helper = 'formNote';
          
              public function isValid($value, $context = null) {
                return TRUE; 
              }
          
          }
          

          【讨论】:

          • 非常感谢!这帮了我很多忙!无法弄清楚为什么我的笔记在提交时消失了。 :)
          【解决方案6】:

          刚刚使用了 tomas.fejfar 评论中的以下内容时遇到了同样的问题。

          array(escape => false)
          
          e.g. 
          
          $decorators = array(
              'ViewHelper',
              'Label',
              array('Description', array('escape' => false,)),
              'Errors')
          );
          

          辛苦了。

          干杯

          【讨论】:

            【解决方案7】:

            这是在 ZF 1.10 中完成的。似乎有人制作了 Zend_View_Helper_FormNote 类,因此您可以插入任意(除了装饰器)HTML。

            要使用它,您必须扩展 Zend_Form_Element_Xhtml。

            <?php
            
            /** Zend_Form_Element_Xhtml */
            require_once 'Zend/Form/Element/Xhtml.php';
            
            /**
             * Note form element
             * 
             */
            class MyNS_Form_Element_Note extends Zend_Form_Element_Xhtml
            {
                /**
                 * Default form view helper to use for rendering
                 * @var string
                 */
                public $helper = 'formNote';
            }
            

            然后使用表单插件加载器,将您的表单/元素类添加到表单对象。我把它放在我的库文件夹中(MyNs/Form/Element/Note.php)。

             $yourForm= new Zend_Dojo_Form();
             $yourForm->addPrefixPath("MyNS_Form", "MyNS/Form/");
            

            现在您可以像调用任何元素一样调用它。

             $yourForm->addElement(
                            'note',
                            'myElementId',
                            array(
                             'value'=>'<a href="#">omgwtfbbq</a>'
                            )
                        )
            

            正如我之前提到的,这仍然将您的代码包装在装饰器中,但它是 ZF 中预置的解决方案。

            【讨论】:

              【解决方案8】:

              使用上述方法,FormNote 的值在提交表单时仍然会消失,但出现验证错误!

              编辑:可以删除,覆盖isValid()问题就消失了。

              【讨论】:

              • 请注意原题的日期。这个问题是近两年前的问题,答案已被接受。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-04-04
              • 1970-01-01
              • 1970-01-01
              • 2010-10-14
              相关资源
              最近更新 更多