У меня возникла проблема, что я уверен, что это просто из-за меня довольно ржавый пирог. Я пытаюсь создать маршрут по умолчанию или catch-all, который будет соответствовать только в том случае, если все остальные маршруты потерпели неудачу. Я предположил, от моего понять большинство 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('/*')
маршрута приводит к конфликту с предыдущими способами. Я также пробовал маршрут «slug», но у меня такая же проблема с конфликтами.
Есть ли какие-либо решения этой проблемы или возможная работа?
Заранее спасибо.
Редактировать
В моем комментарии ниже я связан с комментарием, что при условии достойного решения моей проблемы. Вот мое простое доказательство концепции.
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) предлагает хорошее решение моей проблемы. Я могу писать new routes.php каждый раз, когда добавляю динамическую страницу или изменяю слизню. – NomadCrypto