Декоратор ViewScript не может установить - PullRequest
1 голос
/ 10 августа 2011

Я слежу за разделом "Полная настройка с использованием ViewScript Decorator" на этой странице -> http://devzone.zend.com/article/3450

В методе init моего класса формы я добавил это

$this->setDecorators(
            array(
                array(
                    'ViewScript',
                        array(
                            'script' => 'display.phtml'
                        )
                )
            )
        );

Теперь в том месте, где появилась моя форма, у меня есть это:

Произошла ошибка
Ошибка приложения

Что я здесь не так делаю? Мне действительно нужно настроить внешний вид формы, и я просто хочу изменить форму, а не внешний вид всей страницы.

Я пробовал это:

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

Что работает, но влияет на отображение всей страницы (я использую Zend Layout). Мне просто нужно передать рендер формы на страницу display.phtml.

Примечание. Есть ли какое-то место, в котором я должен разместить display.phtml? Я поместил его в папку view \ scripts.

Ответы [ 3 ]

2 голосов
/ 10 августа 2011

Я думаю, что это так просто.

ViewScript нельзя использовать в методе init () для вашей формы по одной простой причине. Если вы посмотрите на пример (и, вероятно, на ваш display.phtml), есть эхо-операторы, подобные этому $this->form->firstname;. На данный момент в init () элементы формы еще не загружены!

Поэтому автор правильно показывает этот код

$form->setDecorators(array(
    array('ViewScript', array('script' => 'demogForm.phtml'))
));

Обратите внимание, что он использует $form в качестве объекта. Либо в контроллере, либо в скрипте вида вы загружаете форму как объект и затем добавляете ViewScript. Так что в одном из ваших контроллеров вы бы сделали что-то вроде этого

$form = new My_Form();
$scriptPath = '/path/to/script/display.pthml'
// or without a path if you have a script folder loaded
$form->setDecorators(array(
    array('ViewScript', array('script' => $scriptPath))
));

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

Обновление Глядя на наименование вашего pthml, я предполагаю (и надеюсь), что это специальный шаблон для вашей формы, а не всего файла макета. Если вы используете весь файл макета, то, конечно, если будет отображать всю страницу!

1 голос
/ 10 августа 2011

При работе со скриптами вида я считаю, что лучше всего вносить любые такие изменения на уровне вида.

Игнорировать детали декоратора ViewScript в вашей форме и устанавливать их из вида, например,

<?php echo $this->form->setDecorators(array(
    'PrepareElements',
    array('ViewScript', array('viewScript' => '_forms/display.phtml'))
)) ?>

Расположение файла display.phtml относительно папки скриптов вида модуля.Если это просто модуль по умолчанию (в папке application), сценарий в моем примере будет расположен по адресу application/views/scripts/_forms/display.phtml

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

Если вы хотите удалить теги HTML, такие как <dt> или <dd> (метки и видовой экран), вы можете использовать методы removeDecorator('HtmlTag') или removeDecorator('Label')

...