Расщепление Zend_Form - PullRequest
       29

Расщепление Zend_Form

0 голосов
/ 18 октября 2011

Я создал Zend_From с парой полей.То, что я хотел бы сделать, это поместить их в абзацы, чтобы они текли естественно.Например,

Danny had [select with 1-10] apples and James had [select with 3-20] pears.

Я пытался сделать это с помощью

$elem= $this->registerForm->getElement('danny');

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

Ответы [ 2 ]

3 голосов
/ 19 октября 2011

Для этого вам не нужна подчиненная форма, просто обычная форма с некоторыми специальными декораторами или удаленными декораторами.

<?php

class Your_Form_Example extends Zend_Form
{

    public function init() {
        // wrap the select tag in a <span> tag, hide label, errors, and description
        $selectDecorators = array(
            'ViewHelper',
            array('HtmlTag', array('tag' => 'span'))
        );

        $this->addElement('select', 'danny', array(
            'required' => true,
            'multiOptions' => array('opt1', 'opt2'),
            'decorators'   => $selectDecorators // use the reduced decorators given above
        ));
    }
}

Тогда вот скрипт вида, который визуализирует форму ...

<form method="<?php echo $form->getMethod() ?>" action="<?php echo $form->getAction() ?>">
  <p>Danny had <?php echo $form->danny ?> apples and James had <?php echo $form->james ?> pears.</p>
  <p>More stuff here...</p>

  <?php echo $form->submit ?>
</form>

В результате должно получиться что-то вроде

<p>Danny had <span><select name="danny" id="danny"><option>opt1</option><option>opt2</option></select></span> apples and James had .....</p>

Чтобы сохранить правильность вывода формы, декораторы Errors, Description и Label удаляются и не будут отображаться.Поэтому, когда вы проверяете ошибки в форме, вам нужно будет отобразить их поверх формы или где-то еще, если у элементов select есть ошибки, поскольку они не будут отображаться вместе с элементами select.

Надеюсь, это поможет.

0 голосов
/ 19 октября 2011

Вы можете использовать даже отдельные поля. Переменная form, которую вы отправляете с вашего контроллера на ваши представления, является массивом объектов. Вы можете получить отдельные поля, используя оператор ->. Например, вы можете использовать

danny had <?php echo $this->form->danny; ?>apples and james had <?php echo $this->form->james; ?>.......

Примечание $this->form->danny и $this->form->james - это ваши HTML-элементы, которые размещаются в вашем zend form

...