【问题标题】:CakePHP - where is the best place to put logic for a specific layout?CakePHP - 为特定布局放置逻辑的最佳位置在哪里?
【发布时间】:2011-12-16 11:41:27
【问题描述】:

我使用的布局包含三个从数据库查询创建的列表。我建议将这些数据放在会话中,这样应用程序就不必在每次页面加载时查询数据库。

应用的管理部分不需要这些数据,因为它使用不同的布局。在 cakePHP 中,放置设置此会话数据的逻辑的最佳位置是哪里?

创建另一个控制器以扩展 AppController 并处理设置此会话数据的最佳方法是什么?

【问题讨论】:

    标签: php model-view-controller session cakephp


    【解决方案1】:

    您可以为这 3 个列表创建元素。最好的方法是使用requestAction and elements。使用元素还可以让您缓存输出,这始终是一个好主意。

    【讨论】:

    • 我需要的是特定于布局的数据,即我不希望为我的管理布局生成这些数据。
    • 它不会在您的管理布局中生成,除非您使用$this->element 并明确使用这三个元素中的任何一个。 CakePHP 的“元素”就像 ruby​​ on rails 的“部分”。它们是可重用的 HTML 代码,您可以将其放置在任何布局中......它不会在每个请求的 beforeRender() 中。它由布局调用,仅在布局中使用。
    【解决方案2】:

    在 AppController 的 beforeRender() 中指定它。如果你在任何控制器中有 beforeRender(),记得调用 parent::beforeRender()

    【讨论】:

    • 但是我的管理部分不需要这些数据,它将继承自 AppController。基本上我只想要我的 default.ctp 模板的数据...
    • 您可以随时在此方法中检查当前布局并做出相应反应。
    【解决方案3】:

    我对 CakePHP 还很陌生,所以这可能不是最好的方法,但我会有一个模型使用自定义行为来检查会话数据是否已加载并从会话加载数据或数据库取决于它是否已经加载。所以我认为代码可以写成一种行为,然后在必要的地方使用模型。如果我在这里错了,请有人纠正我。

    【讨论】:

    • 我不喜欢在我的模型中使用会话。如果您不想查询数据库,只需使用缓存即可。这就是 =)
    • 模型不应使用会话。
    猜你喜欢
    • 1970-01-01
    • 2013-12-01
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 2012-08-09
    • 1970-01-01
    相关资源
    最近更新 更多