2010-01-27 5 views
2

Dans mon application, j'ai un certain nombre de contrôleurs avec le même préfixe. Par souci d'exemple, disons qu'ils sont:Remplacement de chaîne dans les routes CakePHP

my_posts 
my_users 
my_letters 

Les URL générées pour ce sont évidemment:

/my_posts/view/1 
/my_users/add 
/my_letters/whatever 

J'aimerais mettre en place une routage personnalisé afin que je puisse utiliser les URL comme ceci:

/my/posts/view/1 
/my/users/add 
/my/letters/whatever 

donc, fondamentalement, si l'URL commence par /my/ le régulateur pour passer à devrait être my_{whatever_comes_next}.

J'ai regardé the documentation, mais je n'arrive toujours pas à le comprendre.

Répondre

3
Router::connect(
    '/my/posts/:action/*', 
    array(
     'controller'=>'my_posts', 
     'action'=>'index' 
    ) 
); 
Router::connect(
    '/my/users/:action/*', 
    array(
     'controller'=>'my_users', 
     'action'=>'index' 
    ) 
); 
[..] 

convenu, que ce n'est pas tout à fait à l'aise, mais il devrait fonctionner ..

+0

c'est ce que je fini par aller avec à la fin. – nickf

1

Vous ne savez pas si c'est possible, mais pourquoi ne pas utiliser un routeur intermédiaire?

Router::connect (
    '/my/*', 
    array (
     'controller' => 'my_router', 
     'action' => 'route', 
    ) 
); 

class MyRouterController extends AppController { 
    ... 
    function route() 
    { 
     $args = func_get_args(); 
     $controller = array_shift ($args); 
     $this->requestAction (
      'my_'.$controller.'/'.implode('/', $args), 
      array ('return' => true) 
     ); 
    } 
}