【问题标题】:Zend-form without Zend-Framework MVC - viewscript isn't displaying elements, but they exists and are displayed by var_dump()没有 Zend-Framework MVC 的 Zend-form - viewscript 不显示元素,但它们存在并由 var_dump() 显示
【发布时间】:2011-10-26 09:30:12
【问题描述】:

当我尝试做类似的事情时

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

【问题讨论】:

  • 好的,问题解决了,我没有覆盖 setView 方法,虽然我以为我做到了

标签: php zend-framework zend-form zend-form-element


【解决方案1】:

如@Hikaru 提供的the link 中所述:

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

因此,与其覆盖表单的render() 方法或手动调用$form-&gt;setView($view),另一种方法是仅将视图设置为ViewRenderer,可能在引导期间:

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

【讨论】:

  • 只有在使用 ZF 的控制器组件时才有可能。该组件是 OP 未使用的 ZF 的 MVC 实现的一部分。
  • @Hikaru-Shindo:天哪!这是一个很好的观点;我错过了 OP 问题的那一部分。 ;-) 我会注意到,当我在没有完整的 ZF MVC 堆栈的情况下使用 Zend_Form 时,仍然可以进行上面的静态调用。在内部,它创建一个ViewRenderer 实例并分配视图。让一切变得更容易,并允许表单回退到使用隐藏在 ViewRenderer 中的视图。但是,与大多数事情一样,YMMV。 ;-)
【解决方案2】:

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

    $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】:

    Zend_Form 依赖于 Zend_View。您还需要使用 Zend_View 类来使其工作。

    您可以阅读有关此主题的内容here

    如何实现它的可能示例:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-23
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 1970-01-01
      • 2018-05-28
      • 1970-01-01
      相关资源
      最近更新 更多