как насчет разделения их косыми чертами?
// www.sitename.com/[COMPANY NAME]/medicine/[DISEASE]
Router::connect('/:company/medicine/:disease', array('controller' => 'diseases', 'action' => 'index'),
array('pass'=>array('company','disease'),
'company'=>"[a-zA-Z\.]+*",
'disease'=>'[a-zA-Z\.]+'));
и контроллер
function diseases($company,$disease){
}
Я не уверен, что вы можете использовать подчеркивание вместо косой черты, я никогда раньше не пробовал.если вы попробуете, я хотел бы узнать результаты =)
Удачи
EDITED : хорошо, мне было слишком любопытно об этой проблеме, и я написал маршрутвот так
Router::connect('/:company_medicine_:disease', array('controller' => 'pages', 'action' => 'test'),
array('pass'=>array('company','disease'),
'company'=>'[a-zA-Z]+',
'disease'=>'[a-zA-Z]+'));
и он не работает u_U
, как я и подозревал, проблема в том, что Cake считает, что имя пользовательского элемента маршрута равно :company_medicine
а не :company
.. после нескольких минут, касающихся / чтения кода Cake, я узнал точное место, где Cake анализирует маршрут и извлекает имена пропущенных элементов.Он находится в / cake / libs / router.php в классе CakeRoute , метод _writeRoute () (около строки 1369):
preg_match_all('#:([A-Za-z0-9_-]+[A-Z0-9a-z])#', $parsed, $namedElements);
так что, как вы можете видеть в регулярном выражении, имена элементов могут содержать подчеркивание, поэтому Cake считает, что именем параметра является ": company_medicine".Таким образом, у вас есть четыре решения:
- используйте косые черты в качестве разделителей для ваших URL
- измените порядок вашего параметра так, чтобы он был
medicine_[COMPANY]_[DISEASE]
измените строку 1369 router.php на эту (НЕ РЕКОМЕНДУЕТСЯ, я думаю, что это нарушит маршруты для плагинов):
preg_match_all('#:([A-Za-z0-9]+)#', $parsed, $namedElements);
используйте url rewrite в вашем .htaccess, чтобы перенаправить все [COMPANY]_medicine_[DISEASE]
на [COMPANY]/medicine/[DISEASE]
, чтобы торт видел его разделенным косой чертой, а браузер - разделенным подчеркиванием.(Я не проверял это, я никогда не добавлял другое правило в .htaccess для Cake = P)