1.3中的CakePHP路由试图定义一个包含额外化妆品参数的路线?

时间:2011-10-12 09:51:39

标签: cakephp routing routes

例如我的网址及其产生的结果将如下:

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 = Cok​​e

的用户
/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'));

2 个答案:

答案 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_\-]*'));