在我的应用程序中,我有许多具有相同前缀的控制器。为了举例,我们说它们是:
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,但仍然无法理解。
答案 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)
);
}
}