Issues

ZF2-447: Inconsistency in 'controller' key causes error with Zend\Navigation\Page::isActive()

Description

Problem getting the router, menu view helper and breadcrumbs view helper to work in sync.

Sample dump of {{$reqParams}} and {{$myParams}} at line 120 of {{Zend\Navigation\Page::isActive()}}, just before {{if (null !== $this->getRoute()}} on line 121:


  '__NAMESPACE__' => string 'Web\Controller' (length=14)
  'controller' => string 'Web\Controller\Tools' (length=20)
  'action' => string 'calendar' (length=8)
  '__CONTROLLER__' => string 'tools' (length=5)

  'controller' => string 'tools' (length=5)
  'action' => string 'calendar' (length=8)

The 'controller' key is checked to see if the page is active, which in this case fails, unless {{CONTROLLER}} is used for comparison.


'Home' => array(
    'label' => 'Home',
    'route' => 'web',
    'controller' => 'index',
    'action' => 'index',
),
'Calendar' => array(
    'label'  => 'Calendar',
    'route' => 'web',
    'controller' => 'tools',
    'action' => 'calendar',
),

If 'controller' for 'Calendar' is set to 'Web\Controller\Tools', isActive would work but the href generated would be /web/Web/Controller/Tools/calendar and not/web/tools/calendar. The breadcrumbs view helper detects 'Home' as the active page even though 'Calendar' is the actual active page.


'router' => array(
    'routes' => array(
        'web' => array(
            'type'    => 'Zend\Mvc\Router\Http\Segment',
            'options' => array(
                'route'    => '/web[/:controller][/:action]',
                'constraints' => array(
                    'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                    'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                ),
                'defaults' => array(
                    '__NAMESPACE__' => 'Web\Controller',
                    'controller'    => 'index',
                    'action'        => 'index',
                ),
            ),
            'may_terminate' => true,
            'child_routes' => array(
                'wildcard' => array(
                    'type' => 'Zend\Mvc\Router\Http\Wildcard',
                    'options' => array(
                        'key_value_delimiter' => '/',
                        'param_delimiter' => '/',
                    ),
                    'may_terminate' => true,
                ),
                'trailingSlash' => array(
                    'type' => 'Zend\Mvc\Router\Http\Literal',
                    'options' => array(
                        'route'    => '/',
                        'defaults' => array(
                        ),
                    ),
                ),
            ),
        ), // end web route
    ), // end routes
), // end router

The other alternative might be to create a route for each page. But if there are 10 controllers each having 5 actions, 50 routes would need to be defined?

Comments

Code tags added.

I will write an unit test to check your router and navigation configuration.

This issue has been closed on Jira and moved to GitHub for issue tracking. To continue following the resolution of this issues, please visit: https://github.com/zendframework/zf2/issues/2515