我正在尝试在附加到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>
答案 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"]?>';