ZF2 - несколько навигационных меню с использованием помощника навигации

Я пытаюсь использовать основную навигацию в сочетании с подменю для более конкретной навигации.

В моем макете я вызываю помощника представления следующим образом:

$this->navigation('main_navigation')->menu()

и в моем представлении я вызываю это так:

$this->navigation('sub_navigation')->menu()

Проблема в том, что всякий раз, когда я вызываю помощник представления navigation() более одного раза, он просто выводит второй в обоих местах. Другими словами, он печатает вложенную навигацию для как главной навигации, и для вспомогательных меню.

Моя объединенная конфигурация выглядит так:

'navigation' => array(
    'main' => array(
        'home' => array(
            'label' => 'Home',
            'route' => 'myroute',
        ),
        'somepage' => array(
            'label' => 'Me',
            'route' => 'somepage'
        )
    ),
    'sub' => array(
        'test' => array(
            'label'  => 'Test',
            'route'  => 'myroute',
            'action' => 'test'
        ),
        'other-test' => array(
            'label'  => 'Other Test',
            'route'  => 'myroute',
            'action' => 'other-test'
        )
    )
)

Как использовать помощник представления navigation, чтобы он печатал правильное меню для каждого вызова?


person Yes Barry    schedule 20.10.2012    source источник
comment
См. ответ на этот вопрос: stackoverflow.com/questions/12972316/   -  person Sam    schedule 20.10.2012
comment
@ Сэм Это не работает. Прошлой ночью я провел 6 часов в IRC-канале ZFtalk, разговаривая с одним из создателей ZfcAdmin и ZfcUser, и он смог успешно воспроизвести мою ошибку, не имея возможности решить это. У меня уже есть именно это для моего приложения, но оно не работает. В этом и суть.   -  person Yes Barry    schedule 21.10.2012
comment
@ Сэм, спасибо, что все равно это нашел. :)   -  person Yes Barry    schedule 21.10.2012
comment
Пожалуйста, мне показалось, что это та же самая методология, но если она не ДАЛЕКО отстает от большинства в #zftalk :D У меня нет другого совета, кроме этого ^^   -  person Sam    schedule 21.10.2012


Ответы (1)


Помощники menu, breadcrumbs, sitemap и links зарегистрированы как плагины. Если вы вызываете $this->navigation('main_navigation') в первый раз, Zend\View\Helper\Navigation создает контейнер "main_navigation". Если вы затем вызываете menu() в первый раз, объект Zend\View\Helper\Navigation\Menu создается и напрямую внедряется контейнер.

Это указывает на недостаток: если вы вызовете $this->navigation('sub_navigation') сейчас, контейнер навигации будет загружен в navigation() помощнике представления. Когда вы затем вызываете menu(), помощник представления меню уже создан. Таким образом, новый контейнер больше не вводится.

Очевидно, это ошибка в кодовой базе. Есть одно быстрое решение: помощник меню также может принимать строку контейнера:

<?php echo $this->navigation()->menu('main_navigation'); ?>
<?php echo $this->navigation()->menu('sub_navigation'); ?>

Я подал вопрос об этом, и ошибка будет исправлена.

person Jurian Sluiman    schedule 21.10.2012
comment
Без проблем! Информацию об этом можно найти здесь: github.com/zendframework/zf2/issues/2817 - person Jurian Sluiman; 21.10.2012