有沒有什麼辦法可以將網址中的網址路由到網址中,而無需在網址中輸入ID?沒有ID的cakephp路由?
所以不是www.mydomain.com/id/article-name我只想www.mydomain.com/article-name
我一直在關注這一點。 http://book.cakephp.org/view/543/Passing-parameters-to-action
有沒有什麼辦法可以將網址中的網址路由到網址中,而無需在網址中輸入ID?沒有ID的cakephp路由?
所以不是www.mydomain.com/id/article-name我只想www.mydomain.com/article-name
我一直在關注這一點。 http://book.cakephp.org/view/543/Passing-parameters-to-action
當然。唯一的要求是URL中有足夠的唯一信息來鎖定您想要的文章。如果/article-name
在數據庫中是唯一的,則可以使用它來查找所需的特定記錄。
在配置/ 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,這樣你不會遇到衝突。網址http://example.com/pages
是指向產品'網頁'還是指向array('controller' => 'pages', 'action' => 'index')
?爲此,您還需要在routes.php
中定義您的路線,以便您可以首先訪問所有控制器,並且只有未定義的休息纔會被傳送到您的ArticlesController
。查看third parameter of 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的方法,你只能有一個包羅萬象的。在這種方法中,你可以定義一個完整的堆棧。
雖然這種方法是有點怪異的,因爲你是從配置文件查詢模型。