2013-06-14 3 views
3

Я устанавливающих некоторые маршруты, как это:Автоматическое преобразование из черточек подчеркивания с использованием Cake PHP маршрутизатор

Router::connect('/background/a-page', array('controller' => 'background', 'action' => 'a_page')); 
Router::connect('/background/another-page', array('controller' => 'background', 'action' => 'another_page')); 
Router::connect('/background/my-third-page', array('controller' => 'background', 'action' => 'my_third_page')); 
// More routes here 

Я хотел бы заменить их маршрут, как это:

Router::connect('/background/:action', array('controller' => 'background')); 

, где url /background/my-third-page будет отображаться на действие my_third_page (в фоновом режиме). Обратите внимание, что url имеет тире, и действие имеет подчеркивания.

В настоящее время Ca не удается отобразить преобразование из черточек в подчеркивание, так с моим новым маршрутом это не удается: /background/my-third-page, но это работает: /background/my_third_page

Я хочу, чтобы дефис в URL. Есть ли способ заставить Cake сопоставить тире с подчеркиваниями?

Я также как и обратной маршрутизации для сопоставления с подчеркиванием в тире, так:

$this->Html->link('View', 
    array('controller' => 'background', 'action' => 'my_third_page') 
); 

будет отображаться на: background/my-third-page.

Спасибо!

+0

Почему бы вам просто не использовать 'mod_rewite', чтобы переписать URL-адреса, прежде чем Cake их увидит? –

+0

Я хотел бы сохранить всю маршрутизацию в приложении Cake, если это возможно. 'mod_rewrite' (или в этом случае' HttpRewriteModule' для Nginx), безусловно, являются опциями, но это другое место для настройки вещей. – tekniskt

+0

Я не уверен, что это возможно только при базовых настройках маршрутизации, когда вы сохраняете, что этот параметр является именем действия, если это будет slug или любые именованные параметры, которые не будут проблемой. Если вам действительно нужно сделать это таким образом, то единственный способ, которым я знаю, что вы можете это сделать, - внести изменения в отправленный объект торта, чтобы он перевел тире на подчеркивания, прежде чем вызывать действие на контроллере, но это модифицирует ядро ​​- так нет обновлений. Возможно, есть какой-то другой способ, который кто-то нашел, попробуйте найти некоторые плагины – johhniedoe

ответ

0

Это борьба с соглашениями об именах CakePHP для URL-адресов http://book.cakephp.org/2.0/en/getting-started/cakephp-conventions.html. Вам лучше использовать mod rewrite для такого рода вещей - и опять же, поскольку это противоречит тому, как URL-адреса обычно выполняются в пироге, торт будет сражаться с вами зубами и ногтями. http://book.cakephp.org/2.0/en/installation/url-rewriting.html может дать вам несколько идей относительно того, что вы хотите сделать.

Я задал соответствующий вопрос некоторое время назад. Is it possible to use Route::Connect to route to a query string parameter?

Смежные вопросы