phprouteszend-framework2zend-routezend-router

ZF2 segment child route not working


What im trying to achieve:

domain.com/user                    = UserController::index
domain.com/user/profile            = UserController::profile
domain.com/user/profile/9          = UserController::profile (with query param id=9)
domain.com/user/profile/9/edit     = UserController::editProfile (with query param id=9)

So i have the following route:

'user' => array(
    'type'    => 'Segment',
    'options' => array(
        'route'    => '/user',
        'defaults' => array(
            '__NAMESPACE__' => 'YrmUser\Controller',
            'controller'    => 'User',
            'action'        => 'index',
        ),
    ),
    'may_terminate' => true,
    'child_routes' => array(
        'profile' => array(
            'type'    => 'Segment',
            'options' => array(
                'route'    => '/profile[/:id]',
                'defaults' => array(
                    'action' => 'profile',
                ),
                'constraints' => array(
                    'id' => '[0-9]*'
                ),
            ),
            'may_terminate' => true,
            'child_routes' => array(
                'edit' => array(
                    'type'    => 'Segment',
                    'options' => array(
                        'route'    => '/edit',
                        'defaults' => array(
                            'action' => 'editProfile',
                        ),
                    ),
                    'may_terminate' => true
                ),
            )
        ),
    )
)

It kinda works, except for the fact that the query parameter ID never gets a value. Anyone who can tell me what i'm doing wrong, im guessing its something stupidly simple...

Thanks in advance,

Yrm


Solution

  • Works for me.

    I var_dumped the $this->params ('id') in the action and got this:

    /user
    null
    
    /user/profile
    null
    
    /user/profile/99
    string '99' (length=2)
    
    /user/profile/99/edit
    string '99' (length=2)