所以我一直在用cakePHP创建我的第一个客户端网站,并遇到了问题。
我正在尝试创建一个类似于WordPress的系统,您可以在其中创建新页面(只是标题,slug和内容),并且它们可以提供给他们的slug地址(即将在mysite.com/about上提供关于)。
我已经创建了自己的控制器& 'Pages'的模型(覆盖核心页面控制器),并设置了简单的函数(view,admin_add,admin_delete)。我的模型很简单,只需$ name就可以连接到db。
我很确定我的问题在于config / routes.php。这是我目前正在使用的代码:
App::import('model', 'Page');
$Page = new Page();
$pages = $Page->find('list', array('fields' => array('id', 'slug')));
Router::connect('/:pages', array('controller' => 'pages'), array('Page' => implode($pages, '|')));
虽然它不起作用。当我访问我有一个页面(即mysite.com/newpage)时,它告诉我找不到新的页面控制器。
请帮助!我的时间紧迫:)
谢谢,
〜哈雷
答案 0 :(得分:4)
您需要扩展Class CakeRoute。将自定义模型代码放在那里,然后将该类名传递给routes.php中的路由定义
routes.php看起来像这样。
App::import('Lib', 'routes/MyCustomRoute');
Router::connect('/:page', array('controller'=>'pages', 'action'=>'display'), array('routeClass' => 'MyCustomRoute'));
然后在libs / routes / my_custom_route.php
中结束class MyCustomRoute extends CakeRoute {
function parse($url) {
$params = parent::parse($url);
//import your model
App::import('Model','Page');
//create model object
$Page = new Page();
//find using $params['page'];
if($Page->find('first', array('conditions'=>array('page.slug'=>$params['page'])))){
//return $params if successfull match
return $params
} else
return false;
//return false to fall through to next route.
}