通过从执行postDispatch()可变的在Zend框架,以查看实例(Pass a variabl

2019-10-20 16:55发布

我有一个控制器插件postDispatch()挂钩,并有我有一个$variable

如何通过这个变量的view实例?

我试过Zend_Layout::getMvcInstance()->getView()但它返回新的视图实例(而不是应用程序资源)。 用相同的$bootstrap->getResource('view')

我不想把它作为一个请求PARAM。
现在,作为一种变通方法我做使用Zend_Registry

但是,它是最好的方式?

Answer 1:

我一直在使用ViewRenderer会得到的观点,当我需要它。 这似乎是Zend类访问视图对象的最常见的方式。

因此,在控制器插件:

class App_Controller_Plugin_ViewSetup extends Zend_Controller_Plugin_Abstract {

  public function postDispatch() {

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

    echo $view->variable;

    $view->variable = 'Hello, World';

  }

}

在控制器:

class IndexController extends Zend_Controller_Action {

  public function indexAction() {

    $this->view->variable = 'Go away, World';

  }

}

在视图脚本:

<?php echo $this->variable; ?>

输出是:走开,离开WorldGo世界

这似乎是问题是,视图脚本呈现执行postDispatch()方法被调用之前,因为这确实返回主视图对象。



Answer 2:

在插件:

class App_Plugin_MyPlugin extends Zend_Controller_Plugin_Abstract{


public function preDispatch (Zend_Controller_Request_Abstract $request){
    $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
    $viewRenderer->setNeverRender(true);
}

public function postDispatch(Zend_Controller_Request_Abstract $request){
   $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
   $view = $viewRenderer->view;
   $view->variable = 'new value';
   $viewRenderer->render();

}

}

在控制器:

类的IndexController延伸化Zend_Controller_Action {

  public function indexAction() {

    $this->view->variable = 'value';

  }

}

在视图脚本:

<?php echo $this->variable; ?>

输出是:新价值



Answer 3:

class ZFExt_Controller_Plugin_Passvar extends Zend_Controller_Plugin_Abstract 
{
    public function postDispatch(Zend_Controller_Request_Abstract $request)
    {

        $view = Zend_Controller_Front::getInstance()
                      ->getParam('bootstrap')
                      ->getResource('view');
        $view->variable = 'Hi there';
    }
}

然后在视图脚本

<p><?php echo $this->variable; ?></p>


文章来源: Pass a variable from postDispatch() to view instance in Zend Framework