Маршруты CakePHP в 1.3 пытаются определить маршрут для дополнительного косметического параметра, который будет включен? - PullRequest
2 голосов
/ 12 октября 2011

Например, мои URL и их действия будут выглядеть так:

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) важно Кроме того, когда пользователь не вошел в систему, также существуют открытые страницы. / содержимое / вид / 3 - контроллер - содержимое, действие - вид И id = 3

Ниже приведено лучшее из того, что у меня есть, но оно всегда требует, чтобы индекс действия был явно записан в URL - но на самом деле я думаю, что это не так уж и плохо, так как помощник по Html-> link должен его создать. Я счастлив построить все свои ссылки с помощником, как я обычно это делаю.

Лучшая попытка:

Router::connect('/:companyslug/:controller/:action', array('controller' => 'companies', 'action'=>'index', 'companyslug'=>'test'));

Ответы [ 2 ]

2 голосов
/ 12 октября 2011

У меня похожая настройка, за исключением того, что я отслеживаю первую часть маршрута, чтобы определить, какие записи отображаются. Вот мои настройки, где ": 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.

Таким образом, вы можете получить значение app в контроллере (в параметрах запроса) и убедиться, что они указаны в правильном URL (убедитесь, что в вашем случае company_id = companyslug).

Один хитрый бит - это опция «persist», что означает, что вам всегда нужно использовать функцию ссылки Html Helper для поддержания правильного префикса в URL.

0 голосов
/ 12 октября 2011

Вы можете использовать Regex в маршруте, например -

Router::connect('/:companyslug/:controller/:action', array('controller' => 'companies', 'action'=>'index'),  array('companyslug'=>'[A-Za-z0-9_\-]*'));
...