【问题标题】:Dynamic pages in cakePHPcakePHP 中的动态页面
【发布时间】:2011-04-01 07:58:06
【问题描述】:

所以我一直在用 cakePHP 创建我的第一个客户端网站,但遇到了问题。

我正在尝试创建一个类似于 WordPress 的系统,您可以在其中创建新页面(简单的标题、slug 和内容),并将它们提供到它们的 slug 地址(即关于将在 mysite.com/about 上提供)。

我为“页面”创建了自己的控制器和模型(覆盖核心页面控制器),并设置了简单的功能(视图、admin_add、admin_delete)。我的模型很简单,只需 $name 即可连接到数据库。

我很确定我的问题在于 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)时,它告诉我找不到新页面控制器。

请帮忙!我的最后期限很紧 :)

谢谢,

~哈雷

【问题讨论】:

    标签: php cakephp dynamic cakephp-1.3


    【解决方案1】:

    您需要扩展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.
    

    }

    【讨论】:

    • 感谢您回答 bryan,不过我有点卡住了。我做到了这一点:pastebin.com/XDAEa1v6 但无法真正弄清楚如何走得更远。我不完全明白如何要求匹配的 $params。
    • @Harley 填写示例,您必须创建模型对象,然后在查找的条件子句中使用 $params。没有测试代码,所以它可能是错误的。使其可编辑,所以如果我犯了一个小错误,请修复它。
    猜你喜欢
    • 2016-10-19
    • 2011-04-27
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多