【问题标题】:Alter database row from Helper or Component - which ist better?从 Helper 或 Component 更改数据库行 - 哪个更好?
【发布时间】:2013-07-14 11:26:02
【问题描述】:

我使用 CakePHP 已经有一段时间了,我认为我对 mvc 原理有很好的理解。但是今天,在坚持使用mvc的同时,遇到了一个我现在不知道如何解决的小问题。

在我的数据库中,有一个表格用于显示我的观点的变化。它的工作原理很像 A/B 测试。当显示我的视图时,我需要选择保存在数据库中的一种变体。

所以在我看来,需要有这样的东西:

<?php
    $variant = $this->Helper->getVariant();

    switch($variant) {
        case 'a':
            echo "some link or content";
            break;
        case 'b':
            echo "some other content";
            break;
    }
?>

但是通过访问 getVariant(),选择的变体必须在数据库中更新,视图的数量也必须更新。这就是我不想在 Controller 中使用 getVariant() 的原因,因为它只能在 View 真正需要它时运行。因为逻辑(控制器)和显示(视图)是分开的,所以我无法在控制器中确定是否需要 getVariant()。怎么办?

【问题讨论】:

  • 还没有代码。我还没有开始编码。但我会在我的问题中添加一些伪代码。
  • 我再次修改了这个问题,现在它更短了,并且更好地解释了一切。我希望这没问题。

标签: php templates cakephp cakephp-helper


【解决方案1】:

在您的控制器中创建一个将更新数据库的操作。然后在您的视图中使用 Ajax 调用该函数,而无需刷新或更改页面。

【讨论】:

  • 但是如果浏览器禁用了 JavaScript 怎么办?另外,它会导致数据库的更新略有延迟。为什么向控制器发送 ajax 调用(用户可以轻松禁用或操作)比在 Helper 中包含模型更好?
  • 使用图像信标(指向撞击计数器的动作的图像),然后就不需要 js
  • @LarsEbert MVC 的全部目的是将数据库和逻辑与表示分离。助手是表示层的一部分。它们的作用是保存由多个视图共享的表示元素,而不是保存与数据库/逻辑相关的代码。
猜你喜欢
  • 2022-09-28
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 2018-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多