« What problem does dependency injection solve?
Sublime Text 2 Plugin: Function Name Display »

Overriding module configuration in ZF2

Let's say that you install the ZF-Common's User module. By default, it sets up its routes under the /user path segment like this:

vendor/ZfcUser/config/module.config.php

return array(
// lots of config stuff here
 
            /**
             * Routes
             */
 
            'Zend\Mvc\Router\RouteStack' => array(
                'parameters' => array(
                    'routes' => array(
                        'zfcuser' => array(
                            'type' => 'Literal',
                            'priority' => 1000,
                            'options' => array(
                                'route' => '/user',
                                'defaults' => array(
                                    'controller' => 'zfcuser',
                                    'action'     => 'index',
                                ),
                            ),
                            'may_terminate' => true,
                            'child_routes' => array(
                                'login' => array(
                                    'type' => 'Literal',
                                    'options' => array(
                                        'route' => '/login',
                                        'defaults' => array(
                                            'controller' => 'zfcuser',
                                            'action'     => 'login',
                                        ),
                                    ),
                                ),
 
// more config stuff here
);

This config section will create the routes /user and through the magic of child_routes, also create /user/login and other required routes.

If you don't want /user and would prefer /member, then it's easy enough to change. Just add a new config file to the project's config/autoload folder:

config/autoload/module.zfcuser.override.config.php

return array(
    'di' => array(
        'instance' => array(
 
           'Zend\\Mvc\\Router\\RouteStack' => array(
                'parameters' => array(
                    'routes' => array(
                        'zfcuser' => array(
                            'options' => array(
                                'route' => '/member',
                            ),
                        ),
                    ),
                ),
            ),
        ),
    ),    
);

As a result of using child_routes, all the other routes under this route will pick up the same segment, so /user/login is now accessed via /member/login. Also, as each route is named independently from its route, all the url view helper calls continue to work as the route's name continues to be zfcuser/login.

Obviously, this technique works for any other config setting that you may wish to override.

Like this article?
  • spacer
  • Tweet

This entry was posted on Thursday, 23rd February 2012 at 11:55 and is filed under Zend Framework 2.

3 Responses to “Overriding module configuration in ZF2”

  1. 1 Oleg Lobach
    February 24th, 2012 at 19:43 #

    Nice note! And useful. Thanks, Rob.

  2. 2 Brian
    March 6th, 2012 at 07:24 #

    Am I the only one who finds the zf2 config arrays incredibly hard to read and prone to spelling errors ?

  3. 3 Ciantic
    March 13th, 2012 at 12:47 #

    Brian, you are not.

    But it is better than having extensive caching framework for configuration files just because parsing them takes ages (looking oddly towards Symfony2).

    While I think they should be in PHP, they might not need be such a deeply nested array perhaps...

    But instead of inventing new configuration syntax, ship it!

The views expressed in these comments are not the views of the publisher. However, we believe in the rights of others to express their legitimate views and concerns. Any legitimate complaint emailed to rob@akrabat.com will be seriously considered and the post reviewed as desirable and necessary.

gipoco.com is neither affiliated with the authors of this page nor responsible for its contents. This is a safe-cache copy of the original web site.