Сохранение Zend_Form от рендеринга тега <form> - PullRequest
2 голосов
/ 01 августа 2011

У меня есть случай, когда UX / Designer разработал дизайн формы, который требует от меня создания тегов <form></form> самостоятельно в шаблоне phtml, а не для того, чтобы Zend_Form автоматически генерировал их из-за некоторой не связанной с вводом разметки. необходимо заполнить.

Как вы удерживаете Zend_Form от рендеринга тегов формы? Я написал следующее переопределение функции render, которое наверняка можно улучшить, но я не могу ничего сделать, манипулируя декораторами.

public function render(Zend_View_Interface $view = null)
    {
        $content = parent::render($view);
        $content = str_replace('</form>','',$content);
        $idx = strpos($content,'>',4) + 1;
        $content = substr($content,$idx);
        return $content;
    }

Ответы [ 2 ]

9 голосов
/ 02 августа 2011

Если я правильно прочитал ваш вопрос, ответ довольно прост: -

$form = new Zend_Form();
$text = new Zend_Form_Element_Text('text');
$text->setLabel('text');
$form->addElement($text);
$form->removeDecorator('form'); // the bit you are looking for :)
Zend_Debug::dump($form->render());

Дает следующий вывод: -

<dl class="zend_form">
    <dt id="text-label">
        <label for="text" class="optional">text</label>
    </dt>
    <dd id="text-element">
        <input type="text" name="text" id="text" value="">
    </dd>
</dl>

то есть тег <form> не отображаетсяЯ думаю, это то, что вам нужно.

Если вы хотите сделать это в каждой форме автоматически, расширив Zend_Form, то переберите метод render() следующим образом:Вы, чем делать это отдельно для каждой отдельной формы.

0 голосов
/ 01 августа 2011

Вы ищете Zend_Form_Decorator_Form в Zend_Form .

$form->setDecorators(array(
    'Form',
    array(array('tag' => 'HtmlTag'), array('tag' => '')),
));

должно работать.

...