我想问一下在 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 处理。那么为什么要把它从控制器中取出并保留在元素中呢?元素可以很好地保留一些通用的可重用内容,例如页眉、页脚、interactive_map ……与应用程序业务对象/实体无关的东西。创建具有相应视图的方法 CartsController::minicart() 并
$this->requestAction('/myeshop/carts/minicart')
用于加载此可重用内容,例如在标题中。优点是现在 Cart 实体的所有业务和视图都由 CartsController 处理。元素中没有隐藏侧面逻辑和侧面视图。这种方法的缺点很明显 - 使用 requestAction() 会花费大量时间。
在这一点上我必须说我完全同意 requestAction() 必须非常小心地使用。用它来调用控制器的一些程序/业务逻辑是糟糕的应用程序设计。这种逻辑不应该放在控制器中,而应该放在模型中。尽管如此,恕我直言,调用控制器操作来获取部分/可重用的内容(视图)并将实体业务保持在一个地方是合法的。
CakePHP 对此有一些最佳解决方案吗?