Phalcon PHP - 在视图中获取控制器名称

3

我有一个网站布局,包含顶部导航栏。当用户点击不同页面时,控制器会改变,因此我需要根据控制器来设置活动状态的类。

views->index.phtml

 <li class='<?php echo (isset($this->controllerName) && $this->controllerName == 'about') ? 'active' : '' ?>'><a href="/about">About Us</a></li>
 <li class='<?php echo (isset($this->controllerName) && $this->controllerName == 'services') ? 'active' : '' ?>'><a href="/services">Member Sevices</a></li>

我希望Phalcon有一个视图函数,或者说我可以在引导程序中放置一些东西,这样它就可以适用于所有页面,而我不必在每个控制器中手动设置controllerName变量。
1个回答

15

在您的视图中访问路由服务:

$this->router->getControllerName()
$this->router->getActionName()

或者如果你正在使用 Volt,你可以使用简写方式

router.getControllerName()
router.getActionName()

这对您的使用场景来说是可行的,但如果您发现菜单逻辑变得太难处理,有几种方法可以实现您尝试做的事情。

我发现最简单的方法是使用 JavaScript,但如果他们禁用了 js(1%),那么它就没有后备方案。如果要覆盖100%的受众,可以使用像Phalcon团队在INVO中使用元素库的方法:https://github.com/phalcon/invo/blob/master/app/library/Elements.php


谢谢,@david.duncan,你的回答很好。如何让元素库工作?我尝试了但没有成功。在我的services.php中,我添加了$di->set('elements', function () { $elements = new Elements();return $elements;}); 在我的views/index.phtml中,我添加了{{ elements.getTabs() }}但是没有显示任何内容。(请注意,我已经复制并编辑了elements.php的内容...我错过了什么吗?) - Pablo Santamaria

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接