Search code examples
regexrouteszend-framework2zend-route

ZF2 Segment Route doesn't match parent's constraint when using children


I created the following routes:

'relatorios' => array(
    'type'    => 'Zend\Mvc\Router\Http\Segment',
    'options' => array(
        'route'       => '/relatorios/:tipo',
        'defaults'    => array(
            'controller' => 'Relatorios',
            'action'     => 'index',
            'tipo'       => 'normais',
        ),
        'constraints' => array('tipo' => '(normais|administrativos)$',
    ),
    'may_terminate' => true,
    'child_routes'  => array(
        'view' => array(
            'type'    => 'Zend\Mvc\Router\Http\Segment',
            'options' => array(
                'route'       => '/view/:id_relatorio',
                'defaults'    => array('action'       => 'view'),
                'constraints' => array('id_relatorio' => '[0-9]+'),
            ),
        ),
    ),
);

This is supposed to match the following routes:
/relatorios/normais //matches
/relatorios/administrativos //matches
/relatorios/normais/view/1 //doesn't match
/relatorios/administrativos/view/1 //doesn't match

So basically the :tipo parameter must be either normais or administrativos and there is a child /view/any_digits.
When the parent route is called it matches, when the child view is called it doesn't match because of my tipo constraint. Why is that?


Solution

  • As per my comment, the $ on the constraint means 'end of the string' (which in this case is the URL path), so it shouldn't be there.