CakePHP路由中的字符串替换

时间:2010-01-27 01:42:21

标签: php model-view-controller cakephp routing url-rewriting

在我的应用程序中,我有许多具有相同前缀的控制器。为了举例,我们说它们是:

my_posts
my_users
my_letters

为这些生成的网址显然是:

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

我想设置一些自定义路由,以便我可以使用这样的网址:

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

所以基本上,如果网址以/my/开头,则传递给的控制器应为my_{whatever_comes_next}

我一直在关注the documentation,但仍然无法理解。

2 个答案:

答案 0 :(得分:3)

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

同意,这不太舒服,但应该有效..

答案 1 :(得分:1)

不确定是否可行,但为什么不使用中间路由器?

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)
        );
    }
}