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