Zend_form ViewScript декоратор / передача аргументов - PullRequest
5 голосов
/ 25 января 2010

У меня есть форма, которая выходит из Zend_Form. Я помещаю форму в декоратор ViewScript следующим образом:

$this->setDecorators(array(array('ViewScript', array('viewScript' => 'game/forms/game-management.phtml'))));

Я хотел бы передать переменную этому ViewScript, но не уверен, как это можно сделать.

Поскольку частичное рендеринг выполняется как Zend_View (что позволяет $ this-> app_store_icon для рендеринга), похоже, должен быть способ передачи переменных для рендеринга. Я попробовал следующее, но безрезультатно.

$this->setDecorators(array(array('ViewScript', array('viewScript' => 'game/forms/game-management.phtml'),array('app_store_picon'=>$current_app_store_picon))));

Буду признателен за любую помощь в том, как это сделать.

спасибо

Ответы [ 3 ]

10 голосов
/ 25 января 2010

Это немного сложно, мне понадобилось полчаса, чтобы понять это, но это можно сделать:)

Дело в том, что вы передаете параметры декоратору ViewScript, а не элементу. Добавление опции:

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

или массив опций:

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

Получив это в частичном, test.phtml:

$option = $this->element->getDecorator('ViewScript')->getOptions();

В первом случае, если передан один параметр, будет $option['foo'], а во втором - $option[0]['foo']

HTH:)

2 голосов
/ 15 марта 2012

Мне нужно было передать HTML-код, указывающий статус оценки, в файл viewscript.phtml. Я нашел более простой способ, чем передать его вместе с декоратором, который заключается в передаче значения из действия контроллера, как если бы вы передавали его в обычный скрипт Zend View. например:

<Controller>
// pass status and score to view
$this->view->status = $this->_sitenamehelper->get_status($id);
$this->view->score = $this->_sitenamehelper->get_score($id);

<viewscript.phtml partial file>
<?php $form = $this->element; ?>
<b>Status: </b><?php echo $form->getView()->status; ?>
<b>Score: </b><?php echo $form->getView()->score; ?>

И там вы можете передать любой HTML-код, отрендеренный .. Я думаю, это будет работать для иконок ..

Mohannad

2 голосов
/ 27 апреля 2010

Существует еще несколько возможных способов добавления значка внутри формы, которые, я думаю, вам следует рассмотреть,

Можно было бы добавить свой собственный тип элемента и добавить собственный декоратор для иконки (я делаю это, чтобы добавить простые иконки для справки или браузеры файлов для элементов форм). Это довольно простое дело.

Другой вариант - просто добавить декоратор HtmlTag к вашему элементу, для которого вы можете указать такие атрибуты, как src в качестве параметров.

Эти два решения на самом деле имеют еще одно скрытое преимущество, заключающееся в упрощении управления, они также исключают использование вспомогательного помощника вида, который используется один раз для каждого используемого декоратора viewscript.

Помощник с частичным представлением может очень сильно увеличить объем памяти и время, затрачиваемое вашей формой (что, кстати, уже довольно много), это усугубляется, когда вы используете декоратор viewscript для элементов вместо всей формы! *

...