Отсутствует активный класс визуализации Zend 2 Navigation

у меня проблема с отображением навигации в zf2. Я не нашел никого, у кого была бы эта проблема. Но, может быть, у вас есть ключ.

Хотя кажется, что все настроено правильно, из-за того, что все работает, рендеринг zend navigation не помечает активный маршрут с помощью class="active".

Это часть моего module.config.php:

'service_manager' => array(
        'factories' => array(
            'app_navigation' => 'Zend\Navigation\Service\DefaultNavigationFactory',
            'User\Acl\Service' => 'User\Acl\ServiceFactory',
            'User\Auth\Service' => 'User\Authentication\ServiceFactory',
        ),
    ),

//global config key for all navigation configurations
'navigation' => array(
     //name of the DefaultNavigation created by DefaultNavigationFactory
     'default' => array(
         //config of first page
         'welcome' => array(
             'label' => 'Home',
             'route' => 'welcome',
             'controller' => 'People\Controller\PeopleController',
             'action' => 'welcome',
             'type' => 'uri',
             'uri' => '/welcome',
             'module'    => 'TheGlobalDatabase',
         ),
...

Это маршрут:

     'router' => array(       
        'routes' => array(
           'welcome' => array(
                'type'    => 'segment',
                'options' => array(
                    'route'    => '/welcome',
                    'defaults' => array(
                        'controller' => 'People\Controller\People',
                        'action'     => 'welcome',
                    ),
                ),
            ),

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

echo $this->navigation()->menu()->renderMenu('app_navigation',array('ulClass'=>'nav navbar-nav welcome')); 

Может у вас есть подсказка, что еще проверить.

Спасибо вам всем!


person David P. P.    schedule 09.08.2014    source источник


Ответы (1)


У вас отсутствует или неправильная конфигурация как маршрута, так и навигации.

Навигация

  • Вам никогда не понадобится использовать параметр type при использовании конфигурации массива. Задача навигационной фабрики — определить, является ли тип uri или mvc. Просто удалите его конфиг.

  • Навигация controller должна быть зарегистрированным именем службы контроллера, а не полным именем класса. 'controller' => 'People\Controller\People'.

  • Также не нужно указывать controller и action в конфигурации навигации при использовании параметра маршрута.

С этими изменениями навигация очень проста.

 'welcome' => array(
   'label' => 'Home',
   'route' => 'welcome'
 );

Маршрут

Это может быть маршрут Literal (поскольку параметры не передаются), и вам не хватает аргумента may_terminate который потребуется, если вы хотите сопоставить свой маршрут.

'welcome' => array(
    'type'    => 'literal',
    'options' => array(
        'route'    => '/welcome',
        'defaults' => array(
            'controller' => 'People\Controller\People',
            'action'     => 'welcome',
        ),
    ),
    'may_terminate' => true,
),
person AlexP    schedule 10.08.2014
comment
Огромное спасибо! Чистка помогла сразу! - person David P. P.; 10.08.2014