代码之家  ›  专栏  ›  技术社区  ›  robjmills

将HTML占位符添加到Zend_表单中

  •  2
  • robjmills  · 技术社区  · 15 年前

    我在用 Zend_Form 对于使用此代码的申请表:

    class Form_ApplicationForm extends Zend_Form
    {
        public function init()
        {
            $this->setAction('/application/new')
                 ->setMethod('post')
                 ->setAttrib('id','application');
    
            $name = new Zend_Form_Element_Text('name');
            $name->setLabel('Your Name')
                 ->setRequired(TRUE)
                 ->addValidator('alpha', FALSE, array('allowWhiteSpace' => true));
    
            $email = new Zend_Form_Element_Text('email');
            $email->setLabel('Email Address')
                  ->setRequired(TRUE)
                  ->addValidator('EmailAddress');
    
            $this->addElements(array($name,$email));
        }
    }
    

    我正在向此表单添加一个Flash文件上载程序(swfupload),它需要一个HTML代码段才能正常工作,代码段如下所示:

    <div id="swfupload-control">
        <p>Upload upto 5 image files(jpg, png, gif), each having maximum size of 1MB(Use Ctrl/Shift to select multiple files)</p>
        <input type="button" id="button" />
        <p id="queuestatus" ></p>
        <ol id="log"></ol>
    </div>
    

    插入这个以便它位于 <form> 我在控制器中插入的内容如下:

    public function newAction()
    {
        $form = new Form_ApplicationForm();
        if($this->_request->isPost()){
            $data = $_POST;
            if($form->isValid($data)){
                /// handle data here
            }else{
                $form->populate($data);
            }
        }
        $this->view->form = $form;
    }
    

    是否有添加占位符或类似内容的方法 森达型 或者应该使用一个装饰器或者类似的东西来完成这项工作?

    谢谢。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Gordon Haim Evgi    15 年前

    您必须为此编写自己的元素,例如 My_Form_Element_SwfUpload 以及渲染器。请参阅以下教程:

        2
  •  3
  •   Emil Ivanov    15 年前

    最简单的方法是在视图中执行此操作:

    通过 echo 在每个元素中,您可以打印它的HTML。有一种方法可以做到:

    <form id="<?= $this->form->getId() ?>" action="<?= $this->form->getAction() ?>">
    
    <? foreach ($this->form as $element): ?>
    <?= $element ?>
    <? if ($element->getName() == 'email'): ?>
    <div id="swfupload-control">
        <p>Upload upto 5 image files(jpg, png, gif), each having maximum size of 1MB(Use Ctrl/Shift to select multiple files)</p>
        <input type="button" id="button" />
        <p id="queuestatus" ></p>
        <ol id="log"></ol>
    </div>
    <? endif ?>
    <? endforeach ?>
    
    </form>
    

    它可以打印所有元素,并在 email 字段。如果从表单中添加或删除字段,此代码将继续工作(当然,如果删除 电子邮件 字段)。