cakephp-маршрутизация без id?

Есть ли способ маршрутизации URL-адресов в торт без идентификатора в URL-адресе?

Поэтому вместо www.mydomain.com/id/article-name я просто хочу www.mydomain.com/article-name

Я слежу за этим. http://book.cakephp.org/view/543/Passing-parameters-to-action

Solutions Collecting From Web of "cakephp-маршрутизация без id?"

Конечно. Единственное требование для этого состоит в том, что в URL-адресе достаточно уникальной информации для привязки нужной статьи. Если /article-name уникально в вашей базе данных, вы можете использовать его, чтобы найти нужную запись.

В config / routes.php:

 // ... configure all normal routes first ... Router::connect('/*', array('controller' => 'articles', 'action' => 'view')); 

В контроллерах / articles_controller.php:

 function view ($article_name) { $article = $this->Article->find('first', array( 'conditions' => array('Article.name' => $article_name) )); ... } 

Будьте осторожны, чтобы не называть ваши продукты, как все, что могло бы законно отображаться в URL-адресе, поэтому вы не сталкиваетесь с конфликтами. Указывает ли URL http://example.com/pages на страницы продукта или на array('controller' => 'pages', 'action' => 'index') ? Для этого вам также необходимо будет определить маршруты в routes.php таким образом, чтобы все ваши контроллеры были доступны в первую очередь, и только неопределенный отдых попадает в ваш ArticlesController . Посмотрите на третий параметр Routes::connect , который позволяет вам указать фильтр RegEx, который вы можете использовать для этой цели.

Вы можете сделать это:

 // In routes.php $rewrites = array(); $rewrites = am($rewrites, ClassRegistry::init('Article')->rewrites()); $rewrites = am($rewrites, ClassRegistry::init('AnotherModel')->rewrites()); $rewrites = am($rewrites, ClassRegistry::init('YetAnother')->rewrites()); foreach ($rewrites as $rewrite) { Router::connect($rewrite[0], $rewrite[1], $rewrite[2]); } 

С помощью метода deceze вы можете только один поймать всех. В этом методе вы можете определить целый стек, если хотите.

Этот метод является хаккой, хотя, поскольку вы запрашиваете модель из файла конфигурации.