Php 没有Zend Framework MVC的Zend表单-viewscript不是';t显示元素,但它们存在并由var_dump()显示

Php 没有Zend Framework MVC的Zend表单-viewscript不是';t显示元素,但它们存在并由var_dump()显示,php,zend-framework,zend-form,zend-form-element,Php,Zend Framework,Zend Form,Zend Form Element,当我试着做一些像 <?=$this->element->mailCiteCheck?> 等等。。。那么如何显示此表单的元素呢 当我这么做的时候 <?=$this->element->mailCiteCheck;die();?> 我得到这个警告: 没有注册的视图对象,ViewHelper装饰器无法渲染 Zend_表单取决于Zend_视图。您还需要使用Zend_View类使其工作 你可以读一些关于这个话题的文章 如何实现这一目标的一个可能示例

当我试着做一些像

 <?=$this->element->mailCiteCheck?>
等等。。。那么如何显示此表单的元素呢

当我这么做的时候

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

我得到这个警告:

没有注册的视图对象,ViewHelper装饰器无法渲染


Zend_表单取决于Zend_视图。您还需要使用Zend_View类使其工作

你可以读一些关于这个话题的文章

如何实现这一目标的一个可能示例:

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

echo $form->render($view);
如@Hikaru提供的中所述:

默认情况下,Zend_Form和Zend_Form_元素将尝试使用在
ViewRenderer

因此,与覆盖表单的
render()
方法或手动调用
$form->setView($view)
不同,另一种方法是只将视图设置到
视图渲染器中,可能是在引导过程中:

Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer')->view = $view;

答案是将视图设置为所有表单元素:

    $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);

好的,问题解决了,我并没有覆盖setView方法,虽然我认为我已经覆盖了,但这只有在使用ZF的控制器组件时才可能。此组件是ZF的MVC实现的一部分,OP没有使用它。@Hikaru Shindo:D'oh!这是一个非常好的观点;我错过了OP问题的那一部分我会注意到,当我在没有完整的ZF MVC堆栈的情况下使用Zend_Form时,仍然可以进行上面的静态调用。在内部,它创建一个
ViewRenderer
实例并分配视图。使一切变得更加简单,并允许窗体返回到使用隐藏在
视图渲染器中的视图。但是,和大多数事情一样,YMMV-)
Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer')->view = $view;
    $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);