在渲染事件期间将变量分配给phprenderer而不传递给布局

时间:2016-08-28 01:54:47

标签: zend-framework zend-framework2 zend-framework3

我正在尝试在附加到render event的事件期间将变量分配给我的视图渲染器,而不是生成值。

我有一个事件,我附加到render event中的Application Module。我也有在render event operation 期间调用的方法。这是一个Zend Framework 3应用程序但是我标记了Zend Framework 2以获得更多曝光,因为框架是非常新的。这里它是

namespace Application;

class Module
{
    public function onBootstrap(MvcEvent $e)
    {
        $app = $e->getParam('application');
        $app->getEventManager()->attach('render', array($this, 'setAssignRouteVariables'));
    }

    public function setAssignRouteVariables(MvcEvent $e)
    {
        $matches    = $e->getRouteMatch();
        $action     = $matches->getParam('action');
        $controller = $matches->getParam('controller');
        $designHandler = $e->getApplication()->getServiceManager()->get('DesignHandler');   
        $designHandler->getPhprenderer()->controllerName='testcontroller';
        $designHandler->getPhprenderer()->actionName='testaction';
    }
}

如果你看,我使用getPhprenderer()类调用方法DesignHandler。此方法返回\Zend\View\Renderer\PhpRenderer的实例。 在此之后的任何情况下,我都会将变量分配给渲染器对象。

在此之后,in my layout - application/view/layout/layout.phtml我这样做:

<script type="text/javascript">
   var currentController = '<?php echo $this->controllerName;?>';
   var currentAction = '<?php echo $this->actionName;?>';
</script>

我收到了blank values

我在这里做错了什么?

以下是当前结果

    <script type="text/javascript">
       var currentController = '';
       var currentAction = '';
    </script>

2 个答案:

答案 0 :(得分:0)

这很有用。

        public function setAssignRouteVariables(MvcEvent $e)
        {
            $matches    = $e->getRouteMatch();
            $action     = $matches->getParam('action');
            $controller = $matches->getParam('controller');     
            $e->getViewModel()->controllerName=$controller;
            $e->getViewModel()->actionName=$action;
        }

答案 1 :(得分:0)

您可以使用$ GLOBALS全局变量。我遇到了同样的问题,但没有找到更好的解决方案。

$GLOBALS["my_index"] = "My value";

在javascript中

var myval = '<?=$GLOBALS["my_index"]?>';