2

我正在尝试通过构建一个简单的 CMS 应用程序来学习 CakePHP,它进展顺利,但是随着我添加更多内容,我对 MVC 结构感到有些困惑。

除了我的帖子之外,我还为“内容块”(基本上是一个管理员可编辑的标题和内容字段)创建了一个简单的模型,我想将其显示为我网站其他页面中的元素。

帮助解释:

我的帖子控制器有一个列出所有博客帖子的索引操作。在该操作的视图中,我还想从数据库中提取特定的“内容块”并将其显示在页面顶部。

另一个示例是出现在每个页面的页脚中的管理员可编辑的“关于”简介。

最后,以与 Wordpress 文本小部件或 Magento 静态块类似的方式,我想防止直接访问“内容块”(即 domain.com/content_blocks/view/id)

在忠实于 CakePHP 和 MVC 约定的同时实现这一目标的理想方法是什么?我已经尝试过几次(例如在元素中使用 requestAction),但只是成功地变得更加困惑。

4

1 回答 1

1

我会按照您建议的方式在元素内使用请求操作,因为这将无法通过 URL 直接访问。因此,您将在 elements 文件夹中创建一个视图:

应用程序/视图/元素/block.ctp:

<?php $sidebar = $this->requestAction(array(
    'controller' => 'ContentBlocks', 
    'action'=> 'viewBlock', 
    'yourtitle'
)); 
// layout your block here
?>

应用程序/控制器/ContentBlocksController.php

public function viewBlock($title) {
    return $this->ContentBlock->findByTitle($title);
}

然后你可以看到这篇文章,了解如何使用元素和 requestAction 进行缓存:http: //mark-story.com/posts/view/how-using-requestaction-increased-performance-on-my-site

此外,您可能想查看 Croogo,它具有您正在寻找的许多功能,并且已经内置了更多功能:http: //croogo.org/

于 2012-04-25T19:16:04.670 回答