我遇到了一個問題,我相信它只是從我相當生疏的蛋糕。我正在嘗試創建一個只有在所有其他路由都失敗時才能匹配的默認或全部路由。我從我的假設最瞭解的MVC框架,像下面這樣就足夠了的:CakePHP抓住所有的路線
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
#... other routes
Router::connect('/*', array('controller' => 'pages', 'action' => 'dynamic_display', 'home'));
CakePlugin::routes();
require CAKE . 'Config' . DS . 'routes.php';
這樣做的問題是,Router::connect('/*')
路線導致與先前路線的衝突。我也嘗試過一個「slu」「的路線,但我遇到了與衝突相同的問題。
有沒有解決這個問題或可能的解決方法?
在此先感謝。
編輯
在我的評論我下面掛的是提供一個體面的解決我的問題的註釋。這是我對概念的簡單證明。
page.php文件
<?php
App::uses('AppModel', 'Model');
/**
* Page model
* @uses AppModel
*/
class Page extends AppModel {
/**
* MongoDB Schema definitions
*
* @var array 'mongoSchema'
* @link https://github.com/ichikaway/cakephp-mongodb/
*/
var $mongoSchema = array(
'title'=>array('type'=>'string'),
'meta_description'=>array('type'=>'text'),
'slug'=>array('type'=>'string'),
'content'=>array('type'=>'text'),
'published'=>array('type'=>'bool'),
'created'=>array('type'=>'datetime'),
);
/**
* afterSave method.
* @return void
*/
public function afterSave($created, $options=array()) {
$this->__rebuildRouteCache();
}
/**
* rebuild route cache method. This will rewrite the routes for our simple CMS each time a page is added or updated
* @return void
*/
private function __rebuildRouteCache() {
$pages = $this->find('all');
$filename = TMP . 'cache' . DS . 'routes.php';
$buffer = "<?php \r\n";
foreach($pages as $page) {
$buffer .= 'Router::connect("'. $page['Page']['slug'] .'", array("controller" => "pages", "action" => "dynamic_display"));';
$buffer .= "\r\n";
}
$buffer .= "?>";
file_put_contents($filename, $buffer);
}
}
?>
routes.php文件
<?php
#..snip
/**
* Include our route cache if it exists
*/
$fname = TMP . 'cache' . DS . 'routes.php';
if(file_exists($fname)) {
require_once $fname;
}
/**
* Load all plugin routes. See the CakePlugin documentation on
* how to customize the loading of plugin routes.
*/
CakePlugin::routes();
/**
* Load the CakePHP default routes. Only remove this if you do not want to use
* the built-in default routes.
*/
require CAKE . 'Config' . DS . 'routes.php';
?>
這不是一個包羅萬象的路線一樣,我想,但它是我的情況可行的解決方案。希望這對其他人也有用。
[此評論](http://stackoverflow.com/a/12316219/4425082)爲我的問題提供了一個很好的解決方案。每次添加一個動態頁面或更改一個slu I時,我都可以寫一個新的routes.php。 – NomadCrypto