在zf2中访问layout.phtml中的变量

时间:2017-03-31 13:04:23

标签: zend-framework2

我在zf2中有简单的应用程序,我在每个应用程序页面都有布局菜单。例如,provinces / index.phtml,district / index.phtml,cities / index.phtml等。

菜单是:

            <li class="start active ">
                <a href="admin">
                    <i class="fa fa-home"></i>
                    <span class="title">
                        Dashboard 
                    </span>
                    <span class="selected">
                    </span>
                </a>
            </li>
            <li>
                <a href="provinces">
                    <i class="fa fa-globe"></i>
                    <span class="title">
                        Provinces
                    </span> 
                </a> 
            </li>
            <li>
                <a href="districts">
                    <i class="fa fa-map-marker"></i>
                    <span class="title">
                        Districts
                    </span> 
                </a> 
            </li>
            <li>
                <a href="cities">
                    <i class="fa fa-tint"></i>
                    <span class="title">
                        Cities
                    </span> 
                </a> 
            </li>

我有代码:

<div class="page-content-wrapper">
    <?php echo $this->content; ?> <!--this print contents of index.phtml -->
</div>

以相同的布局访问每个页面。

现在我想动态制作菜单,即选择省份然后突出显示省份,如果选择了区域,则应突出显示菜单中的区域。

我尝试了如下逻辑: 在provinces / index.phtml我写代码$ selected_pa​​ge =“provinces”,在zone / index.phtml我写代码$ selected_pa​​ge =“区”等

然后在布局菜单中:

我写class =“start active”&gt;

同样适用于地区和省份等。

但是这里变量 $ selected_pa​​ge 无法访问,因为

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

只能打印和显示index.phtml的内容,而变量不会传递给布局。 那我该怎么做呢?我应该如何将变量 $ current_page 传递给布局,或者向我展示其他逻辑。

提前致谢:

屏幕截图如下所示,其中突出显示了仪表板:enter image description here

1 个答案:

答案 0 :(得分:1)

如果要将变量从控制器/操作(例如provincesAction())传递给视图。使用layout()控制器插件:

public function provincesAction()
{
    $this->layout()->setVariable('foo', 'bar');
    return new ViewModel([]);
}

在layout.phtml中

// html code
<?php echo $this->foo; ?> // It will display "bar"
// more html code

但是以你的榜样为例。我建议你使用navigation()查看助手。详细了解https://framework.zend.com/manual/2.4/en/modules/zend.navigation.view.helper.menu.html。这个插件只是为了你需要的东西。