1)a:对于company_id属于company = Pepsi
的用户/pepsi/ - controller - users, action - dashboard (their Auth->user 'company_id' will be used and their user->id)
/pepsi/companies/view - controller - companies, action - view
/pepsi/users/ - controller - users, action - index (trailing slash preferably optional)
/pepsi/users/dashboard - controller - users, action - dashboard
1)b:对于company_id属于company = Coke
的用户/coke/ - controller - users, action - dashboard
/coke/companies/view - controller - companies, action - view
/coke/users/ - controller - users, action - index (trailing slash preferably optional)
/coke/users/dashboard - controller - users, action - dashboard
2)对于使用路由前缀adminperson的管理员
/adminperson/users - controller - users, action - index
/adminperson/users/view/3 - controller - users, action - view , id = 3
/adminperson/companies/delete/6 - controller - companies, action - delete Id = 6
3)重要然后当用户没有登录时,也有公共页面。 / contents / view / 3 - controller - contents,action - view AND id = 3
下面是我到目前为止所做的最好的,但它始终要求将动作索引显式写入URL - 但事实上我认为这不是一个问题,因为Html->链接助手应该产生它。我很乐意像通常那样用帮助者建立我的所有链接。
Router::connect('/:companyslug/:controller/:action', array('controller' => 'companies', 'action'=>'index', 'companyslug'=>'test'));
答案 0 :(得分:2)
我有类似的设置,除了我跟踪路线的第一部分以确定显示哪些记录。这是我的设置,其中“:app”取代了您所说的“:companyslug”:
$app_names = "app1|app2|test_app"; // In real code these are pulled from a model
Router::connect(
'/:app/:controller/:action/*',
array( ),
array(
'persist'=>array('app'),
'app'=>$app_names
)
);
Router::connect(
'/:app/:controller',
array('action'=>'index'),
array(
'persist'=>array('app'),
'app'=>$app_names
)
);
Router::connect(
'/:app',
array('controller'=> 'pages', 'action'=>'display', 'home'),
array(
'persist'=>array('app'),
'app'=>$app_names
)
);
// Allow non-app specific access. (I have disabled the default CakePHP routes.)
Router::connect('/:controller', array('action' => 'index'));
Router::connect('/:controller/:action/*');
注意:这是来自Cake 2.0RC3,但我相信它应该在1.3中一样。
通过这种方式,您可以在控制器中检索应用程序的值(在请求参数下)并确保它们位于正确的URL中(确保在您的情况下使用company_id = companyslug)。
一个棘手的问题是'persist'选项,这意味着您总是需要使用Html Helper的链接功能来维护URL中的正确前缀。
答案 1 :(得分:0)
您可以在路线中使用正则表达式,例如 -
Router::connect('/:companyslug/:controller/:action', array('controller' => 'companies', 'action'=>'index'), array('companyslug'=>'[A-Za-z0-9_\-]*'));