【问题标题】:Initializing Layout Variables in Module.php using ZF2 and TWIG使用 ZF2 和 TWIG 在 Module.php 中初始化布局变量
【发布时间】:2013-03-28 22:15:27
【问题描述】:

早安,

我有一个 Twig 布局模板,其中包含 ZF2 骨架(zfctwig 版本)的内容,我想使用我将在 module.config.php 中设置的变量进行动态主导航。

layout.twig:

<div class="nav-collapse collapse">
   <ul class="nav">
   {% for item in navigation %}

    <li {% if item.active %} class="active" {% endif %}>
       <a href="{{ url(item.route) }}">
       {{ translate(item.name) }}
       </a>
    </li>

   {% endfor %}
   </ul>
</div><!--/.nav-collapse -->

我将使用 Module.php 中的 onBootstrap() 方法传递它:

模块.php:

$navigation = array(
   'home' => array(
      'name' => 'Home',
      'route' => 'home',
   ),
   'profile' => array(
      'name' => 'Profile',
      'route' => 'myroute',
      'active' => true
   ),
);

$view = $e->getApplication('application')->getMvcEvent()->getViewModel();

$view->navigation = $navigation;

在我完成这项工作后,$navigation 变量将被放置在我的 module.config.php 中。

当我不在模板中使用 twig 时(例如没有 twig 代码的 layout.phtml),此代码有效,但当我使用上述 layout.twig 时,{{navigation}} 为空。

我认为我不应该使用

$view = $e->getApplication('application')->getMvcEvent()->getViewModel();

因为我认为它返回默认的 zf2 ViewModel 而不是 twig 版本,但我不知道它是如何检索的。

如果这不是问题,我做错了什么?如果我让它工作,我如何在我的一个控制器中将 $navigation['profile'] 的活动索引更改为 false?

非常感谢!

更新:

似乎没有人遇到过同样的问题。我这样做是错误的吗?有一个更好的方法吗?目标是创建一个动态主菜单和导航,可以使用 module.config.php 中的设置进行修改,而不是不断更新视图文件。在特定控制器中更改它也不好,因为我希望它是全局的,因为主菜单在每个页面上都是相同的。我在网上搜索过,但找不到使用 twig 的方法。

【问题讨论】:

    标签: php zend-framework2 twig


    【解决方案1】:
    $sm->get('ZfcTwigRenderer');
    

    使用此代码访问树枝渲染器

    示例:

    public function onBootstrap(MvcEvent $e)
        {
    
            $ZfcTwigRenderer = $e->getApplication()->getServiceManager()->get('ZfcTwigRenderer');
    
    
        }
    

    【讨论】:

    • 感谢您的回答。我有点迷茫,我应该把它放在我的 Module.php 方法 onBootstrap() 上吗?我怎样才能让服务经理在那里?抱歉,我是 ZF 的新手。非常感谢。
    • 谢谢,但还是不行。是 $ZfcTwigRenderer->navigation = $navigation;足够了还是我需要调用一个方法来设置它?
    • 你在哪里使用 $ZfcTwigRenderer->navigation 在你的模板中?在布局或模板中?语法会有所不同
    • 我在 onBootstrap() 中使用它。之后 $ZfcTwigRenderer = $e->getApplication()->getServiceManager()->get('ZfcTwigRenderer');我调用 $ZfcTwigRenderer->navigation = $navigation.
    • 我上面的 layout.twig 代码没有变化。我刚刚在 Module.php 中更改了 onBootstrap() 方法的内容以反映您的答案,但我仍然遇到同样的问题。我真的很感谢你的回复。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 2016-11-25
    • 2017-06-21
    • 2021-03-17
    相关资源
    最近更新 更多