0

介绍

在我的个人项目中,我正在使用:

  • XAMPP 与 PHPv7.1.6
  • Symfonyv3.3.6
  • KnpMnenuBundle dev-master / 2.2.x-dev [link 1] , [link 2] , [link 3]用于管理菜单。
  • 引导程序v3.3.7
  • Bootstrap 和 KnpMenuBundle 集成[链接 4]

配置

为了进行设置,我使用了 [2]、[3] 中的文档和代码示例 [4]。我的菜单正在运行,它们之间的集成BootstrapKnpMenuBundle有效。

问题

为了实现language switcher,我正在使用twig模板。

它工作正常,但我想转向更具可扩展性的方法 - 即 - 使用专用捆绑包(KnpMenuBundle)。

目前MenuBuilder产生丑陋的 URL(显示在结果部分code sample 1)。我希望它生成显示在结果部分的链接code sample 2

我不知道如何实现。

问题

如何使用 MenuBuilder 生成漂亮的 URL?

如何强制合并路由参数MenuBuilder

代码:样品 1

我的样本MenuBuilder

$language['Language']->setChildrenAttribute("class", "dropdown-menu")
    ->addChild('Language LV', array('label' => 'language.lv', 'route' => 'homepage_lv', 'routeParameters' => array('_locale' => 'lv')))
    ->setExtra('translation_domain', 'language');
$language['Language']->setChildrenAttribute("class", "dropdown-menu")
    ->addChild('Language EN', array('label' => 'language.en', 'route' => 'homepage_en', 'routeParameters' => array('_locale' => 'en')))
    ->setExtra('translation_domain', 'language');
$language['Language']->setChildrenAttribute("class", "dropdown-menu")
    ->addChild('Language RU', array('label' => 'language.ru', 'route' => 'homepage_ru', 'routeParameters' => array('_locale' => 'ru')))
    ->setExtra('translation_domain', 'language');

产生以下链接:

不会发生语言环境更改

代码:样本 2

常规Menu树枝模板

<li><a href="{{ path(current_route, app.request.get('_route_params') | merge({'_locale': 'lv'})) }}">{{ "language.lv" | trans({}, "language") }}</a></li>
<li><a href="{{ path(current_route, app.request.get('_route_params') | merge({'_locale': 'en'})) }}">{{ "language.en" | trans({}, "language") }}</a></li>
<li><a href="{{ path(current_route, app.request.get('_route_params') | merge({'_locale': 'ru'})) }}">{{ "language.ru" | trans({}, "language") }}</a></li>

产生以下链接:

单击它们后实际上会更改语言环境

代码:样本 3

routing.yml我文件的相关部分

# redirecting home
homepage:
    path: /
    defaults:
        _controller: 'FrameworkBundle:Redirect:redirect'
        route: home
        permanent: true

# redirecting home
homepage_lv:
    path: /lv/
    defaults:
        _controller: 'FrameworkBundle:Redirect:redirect'
        route: home
        permanent: true

# redirecting home
homepage_en:
    path: /en/
    defaults:
        _controller: 'FrameworkBundle:Redirect:redirect'
        route: home
        permanent: true

# redirecting home
homepage_ru:
    path: /ru/
    defaults:
        _controller: 'FrameworkBundle:Redirect:redirect'
        route: home
        permanent: true

home:
    path:     /{_locale}/home
    defaults: { _controller: 'AppBundle:Home:home' }
    requirements:
        _locale: lv|en|ru

结论

请指教。

感谢您的时间和知识。

4

1 回答 1

0

所以看起来,routeswith parametersin MenuBuilder(与模板相反routestwig不能处理redirectsinrouting.yml

这意味着我的案例的正确语法是:

$language['Language']->setChildrenAttribute("class", "dropdown-menu")
    ->addChild('Language LV', array('label' => 'language.lv', 'route' => 'home', 'routeParameters' => array('_locale' => 'lv')))
    ->setExtra('translation_domain', 'language');
$language['Language']->setChildrenAttribute("class", "dropdown-menu")
    ->addChild('Language EN', array('label' => 'language.en', 'route' => 'home', 'routeParameters' => array('_locale' => 'en')))
    ->setExtra('translation_domain', 'language');
$language['Language']->setChildrenAttribute("class", "dropdown-menu")
    ->addChild('Language RU', array('label' => 'language.ru', 'route' => 'home', 'routeParameters' => array('_locale' => 'ru')))
    ->setExtra('translation_domain', 'language');

它会产生漂亮的 URL。

于 2017-08-26T11:10:05.023 回答