WatsMyName
WatsMyName

Reputation: 4478

Routing not working in phalcon framework

I have many modules and depending upon modules routes are generated dynamically. For explaining purpose I m adding route for just one module. Following are the routes for the users module.

<?php

//1
$router->add('/users',array(
    'module' =>'users',
    'namespace'=>'Backend\users\Controllers\\',
    'controller'=>'index',
    'action' => 'index'
));

//2
$router->add('/users/:params/',array(
    'module' => 'users',
    'namespace'=>'Backend\users\Controllers\\',
    'controller'=>'index',
    'action' => 'index',
    'params'=>1
));

//3
$router->add('/users/:action',array(
    'module' => 'users',
    'namespace'=>'Backend\users\Controllers\\',
    'controller'=>'index',
    'action'=>1
));

//4
$router->add('/users/:action/:params',array(
    'module' => 'users',
    'namespace'=>'Backend\users\Controllers\\',
    'controller'=>'index',
    'action'=>1,
    'params'=>2
));
?>

Lets say the url for the user module is http://www.example.com/admin/users/

This url matches the very first route and its working as expected. But when we navigate to next page, my url looks like http://www.example.com/admin/users/2

now the problem is it should match 2nd route, but it matches 4th route. If I move 2nd route all the way down, the above url work, but the url http://www.example.com/admin/users/search/1 will not work

Can anybody help me make it work? Thanks

Upvotes: 1

Views: 604

Answers (1)

galki
galki

Reputation: 8715

:params is tricky because it will match anything. So /users/:params/ matches both /users/:action and /users/:action/:params, which itself has :params in it - making it a routing mind blow.

As a general rule avoid the mind blow scenario. For example you can put :params at the end of the longest possible match (/users/:action/:params) and then rewrite the shorter routes without any :params in them.

Upvotes: 1

Related Questions