没有Zend-Framework的Zend-form MVC - viewscript不显示元素,但它们是存在的,并由v


Zend-form without Zend-Framework MVC - viewscript isn't displaying elements, but they exists and are displayed by var_dump()

当我尝试做一些像

 <?=$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装饰器不能在没有注册视图对象的情况下渲染

如@Hikaru提供的链接所述:

默认情况下,Zend_Form和Zend_Form_Element将尝试使用在ViewRenderer中初始化的视图对象

因此,而不是重写表单的render()方法或手动调用$form->setView($view),另一种方法是将视图设置为ViewRenderer,可能在引导期间:

Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer')->view = $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);

Zend_Form依赖于Zend_View。你还需要使用Zend_View类来让它工作。

你可以在这里读到一些关于这个话题的文章。

如何实现它的一个可能的例子:

$view = new Zend_View();
$form = new My_Form();
echo $form->render($view);