尝试使用 Phalcon 与助手一起激活当前 link

Trying to make current link active with helpers using Phalcon

我正在使用 Phalcon 并尝试让我的网络应用程序的每个页面的导航项显示为活动状态,具体取决于用户是否在该视图中。我正在使用 ActiveHelper.php 调用静态函数。

ActiveHelper.php:

public static function isActive($route){

    if ($route == $this->router->getRewriteUri()){
      echo "active";
    }

layout/public.volt:

<a href="{{ url('home') }}" class="<?php ActiveHelper::isActive('/home/'); ?>">Home</a>
<a href="{{ url('basicinfo') }}" class="<?php ActiveHelper::isActive('/basicinfo/'); ?>">Basic Info</a>

虽然这似乎不起作用,但它确实有效:

 <a href="{{ url('home') }}" class="
<?php 
   $route = '/home/';
   if ($route == $this->router->getRewriteUri()){
      echo 'active';
    } 
?>">Home</a>

回显时 $this->router->getRewriteUri(); 我得到当前页面,例如“/home/”或“/basicinfo/”

public static function isActive($route){

    if ($route == $this->router->getRewriteUri()){
      return "active";
    }
    // ...
    return "";

在布局视图中:

<a href="{{ url('home') }}" class="<?php echo $currentUri=='/home/'?'active':'' ?>">Home</a>

编辑:在您有权访问 $router 的 BaseController 中,您可以设置一个变量,该变量将被注入到名为 $currentUri 的布局中,您可以改为检查它,这样代码就不会被一遍又一遍地调用并且变量将具有要检查的值。从布局中删除 isActive 函数调用并将变量传递到视图中。

在你的index.php中:

$compiler->addFunction('navClassName', function ($resolvedArgs) {
    return "BaseController::getNavClassName(".$resolvedArgs.")";
});

在 BaseController 中:

public static function getNavClassName($uri) {
    $di = Di::getDefault();
    if ($di->get('router')->getRewriteUri() == $uri) {
        return 'nav-link active';
    }
    return 'nav-link';
}

例如,检查您是否在 index/index 页面上...

伏特:

<li class="nav-item">
    {{ link_to('index/index', 'HOME', 'class': navClassName('/index/index')) }}
</li>