我正在尝试通过构建一个简单的CMS应用程序来学习CakePHP,它进展顺利但是当我添加更多时,我对MVC结构感到有些困惑。
除了我的帖子之外,我还创建了一个简单的“内容块”模型(基本上是一个管理员可编辑的标题和内容字段),我希望将其显示为我网站其他页面中的元素。
帮助解释:
My Posts控制器有一个索引操作,列出了所有博客帖子。在该操作的视图中,我还想从数据库中提取特定的“内容块”并将其显示在页面顶部。
另一个例子是管理可编辑的“关于”模糊,它出现在每个页面的页脚中。
最后,以与Wordpress文本小部件或Magento静态块类似的方式,我想阻止“内容块”可直接访问(即domain.com/content_blocks/view/id)
实现这一目标的理想方法是什么,同时坚持CakePHP和MVC惯例? 我已经对它进行了几次尝试(比如在元素中使用requestAction),但只是成功地让它变得更加困惑。
答案 0 :(得分: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/