CakePHP中的动态布局

Ale*_*ian 3 model-view-controller layout cakephp

抱歉问题标题,但我找不到更恰当的方式来表达这个.

我目前正在构建一个CakePHP驱动的网站,我不太确定如何解决以下问题.该网站看起来像下面的样式:

网站样机http://i49.tinypic.com/157mn7.jpg.

灰色区域是布局的一部分,因为它们的内容在视图之间不会更改.在侧边栏中,我有一组链接到多个模型的广告.我需要控制器逻辑来确定与广告相关联的图片.此外,广告列表必须是动态的.我应该把构建侧边栏的逻辑放在哪里?

我想过:

  • 将逻辑放入AppController(beforeFilter/ afterFilter) - 问题是我不能使用我需要的控制器逻辑(其他控制器继承AppController,我不知道如何在那里使用它们).
  • 制作组件 - 是否可以构建依赖控制器的组件?
  • 在所有呈现视图的控制器中复制侧边栏代码 - 这对我来说似乎有些愚蠢.

什么是蛋糕的方式进行呢?


更新

经过一些阅读和实验,我已经完成了大部分的重构.

我通过在模型中移动用于构建广告的逻辑(消除了检索图片的组件)而不是使用来获得最佳性能requestAction.它几乎快三倍,代码看起来好多了.

har*_*pax 5

我想答案是requestAction以防结果是可缓存的:

http://book.cakephp.org/view/434/requestAction


Rob*_*son 5

我已经为数据驱动的导航做了类似的事情。我把我的逻辑放进去AppController::beforeRender,没有任何问题。我不确定我是否理解您对控制器继承的担忧。我通过以下方式检索菜单:

$menus = $this->NavMenuItem->groupByMenu();
$this->set( compact( 'menus' ) );
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个呈现菜单的元素。它由布局通过以下方式执行:

<?php echo $this->element( 'navigation', array( 'id' => 'secondary', 'menu' => $menus['SECONDARY'] ) ) ?>
Run Code Online (Sandbox Code Playgroud)

如果这没有帮助,也许您可​​以在评论中进一步解释控制器继承的问题。