Zend-форма без Zend-Framework MVC - viewscript не отображает элементы, но они существуют и отображаются с помощью var_dump () - PullRequest
3 голосов
/ 26 октября 2011

Когда я пытаюсь сделать что-то вроде

 <?=$this->element->mailCiteCheck?>

ничего не отображается.

Однако, когда я делаю:

<?=var_dump($this->element->mailCiteCheck);?>

, я получаю:

object(Zend_Form_Element_Checkbox)#118 (33) {
  ["checked"]=>
  bool(false)
  ["helper"]=>
  string(12) "formCheckbox"
  ["options"]=>
  array(2) {
    ["checkedValue"]=>
    string(1) "1"
    ["uncheckedValue"]=>

И так далее ... так как я могу отобразить элементы этой формы?

И когда я делаю

<?=$this->element->mailCiteCheck;die();?>

, я получаю это предупреждение:

Декоратор ViewHelper не может выполнить рендеринг без зарегистрированного объекта просмотра

Ответы [ 3 ]

4 голосов
/ 26 октября 2011

Как отмечено в ссылка , предоставленная @Hikaru:

По умолчанию Zend_Form и Zend_Form_Element будут пытаться использовать объект представления, инициализированный в ViewRenderer

Таким образом, вместо переопределения метода render() формы или ручного вызова $form->setView($view), альтернативный подход состоит в том, чтобы просто установить представление в ViewRenderer, возможно, во время начальной загрузки:

Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer')->view = $view;
3 голосов
/ 27 октября 2011

Ответ состоял в том, чтобы установить представление для всех элементов формы:

    $view = new Zend_View();
    $view->addScriptPath(APPLICATION_FORM_SCRIPT_PATH);
    $view->addBasePath(APPLICATION_SCRIPT_PATH);
    $replyForm = new Form_MailReply();
    $replyForm->setView($view);
    foreach ($replyForm as $item){
        $item->setView($view);
    }
    $replyForm->render($view);
3 голосов
/ 26 октября 2011

Zend_Form зависит от Zend_View. Вам также нужно использовать класс Zend_View, чтобы он работал.

Вы можете прочитать что-нибудь по этой теме здесь .

Возможный пример, как этого добиться:

$view = new Zend_View();
$form = new My_Form();

echo $form->render($view);
...