Zend: ViewScript Decorator не отображает элементы формы

Я работаю с Zend совсем недавно. Я открыл для себя этот декоратор ViewScript для форм и считаю его лучшей альтернативой классическим декораторам форм Zend. Но у меня проблема с отображением формы. У меня работает код, но нет отображения, которое я получаю от представления.

Вот мои коды:

Форма:

class Application_Form_Registration extends Zend_Form
{
    public function init()
    {   
        $username = new Zend_Form_Element_Text("username");
        $submit = new Zend_Form_Element_Submit("submit");
        $this->setAction("/test.php");
        $this->setMethod("get");
        $this->addElements(array($username, $submit));
        $this->setElementDecorators(array(
          array('ViewScript', array(
            'viewScript'=>'test.phtml'
          ))
        ));
    }
}

Контроллер:

class IndexController extends Zend_Controller_Action
{
    public function init()
    {
    }

    public function indexAction()
    {
        $form = new Application_Form_Registration();
        $this->view->form = $form;

    }
}

test.phtml (Мой ViewScript)

<form action="<?php $this->escape($this->form->getAction()); ?>">
<div style="width: 100px; height: 100px; background: blue;">
    <?php echo $this->element->username; ?>
    <?php echo $this->element->submit; ?>
</div>
</form>

И мое мнение (index.phtml)

<?php echo $this->form; ?>

Я что-то пропустил и / или сделал неправильно с приведенным выше кодом?


person Aldee    schedule 01.04.2012    source источник


Ответы (2)


Заменять

  $this->setElementDecorators(array(
              array('ViewScript', array(
                'viewScript'=>'test.phtml'
              ))
            ));

с участием

$this->setDecorators(array(
              array('ViewScript', array(
                'viewScript'=>'test.phtml'
              ))
            ));

Вы существенно переопределили декоратор по умолчанию ViewHelper, поэтому показывать нечего.

Как форма (html-тег формы), так и элементы формы (тип ввода текста, радио и т. д.) используют декораторы для отображения самих себя. Вызывая setElementDecorators для экземпляра Zend_Form, вы переопределяете декораторы элементов формы, а не декораторы формы, поэтому вместо этого нам нужно использовать setDecorators.

person Mr Coder    schedule 01.04.2012
comment
спасибо, приятель .. код работает для меня .. но в чем разница между ними? - person Aldee; 01.04.2012
comment
аааа.. я понял.. поэтому, когда мы используем setElementDecorators, мы переопределяем все, что его окружает.. теперь я понял.. спасибо.. :D - person Aldee; 01.04.2012

Верьте или нет, вы получаете доступ к getAction в частичном, используя element->getAction, и не забудьте повторить это:

//test.php
<form action="<?php echo $this->escape($this->element->getAction()); ?>">
<div style="width: 100px; height: 100px; background: blue;">
    <?php echo $this->element->username->render(); ?>
    <?php echo $this->element->submit->render(); ?>
</div>
</form>

и вид будет:

//index.phtml
<?php echo $this->form ?>
person RockyFord    schedule 01.04.2012
comment
спасибо, Рокки... Я сделал то, что ты велел, но форма все еще не отображается/не отображается... есть идеи? - person Aldee; 01.04.2012
comment
Расположение по умолчанию для части сценария просмотра будет /view/scripts/test.php. Так было бы с любым модулем. - person RockyFord; 01.04.2012
comment
да .. я понимаю .. в настоящее время я еще не работаю с модулем, но с нетерпением жду его. хммм.. Я просто тестирую его в месте по умолчанию. - person Aldee; 01.04.2012
comment
проверьте редактирование и посмотрите, работает ли оно. Я добавил -›render() к элементам. - person RockyFord; 01.04.2012
comment
давайте продолжим это обсуждение в чате - person RockyFord; 01.04.2012