【发布时间】:2013-03-08 15:44:07
【问题描述】:
我想问一下在 CakePHP 1.3 中创建可重用内容块的最佳方法。
在可重复使用的内容块下,我指的是用于构建页面的部分视图。例如。在 eshop 应用程序中,迷你车摘要可以被视为可重用的内容块 - 它显示在每个页面标题上。
在 CakePHP 1.3 中有两种可能性(两者都有严重的缺点):
创建元素 /app/plugins/myeshop/elements/minicart.ctp 并使用
$this->element('minicart)加载此可重用内容,例如在标题中。缺点是这会将 Cart 实体的业务分成很多地方。 Minicart 只是 Cart 实体的一些表示,其视图由控制器 /app/plugins/myeshop/controllers/carts_controller.php 处理。那么为什么要把它从控制器中取出并保留在元素中呢?元素可以很好地保留一些通用的可重用内容,例如header, footer, interactive_map, ... 与应用业务对象/实体无关的东西。使用相应视图创建方法 CartsController::minicart() 并使用
$this->requestAction('/myeshop/carts/minicart')加载此可重用内容,例如在标题中。 优点是 现在 Cart 实体的所有业务和视图都由 CartsController 处理。元素中没有隐藏侧面逻辑和侧面视图。 这种方法的缺点很明显 - 使用 requestAction() 会花费大量时间。
在这一点上我必须说我完全同意 requestAction() 必须非常小心地使用。用它来调用控制器的一些程序/业务逻辑是糟糕的应用程序设计。这种逻辑不应该放在控制器中,而应该放在模型中。尽管如此,恕我直言,调用控制器操作以获取部分/可重用内容(视图)并将实体业务保持在一个位置是合法的。
CakePHP 对此有什么最佳解决方案吗?
【问题讨论】:
标签: php cakephp cakephp-1.3