【问题标题】:Need advice on organizing code需要有关组织代码的建议
【发布时间】:2012-12-06 04:58:55
【问题描述】:

我使用的是 CakePHP 2.2.3,我需要为我的网站建立一个管理/仪表板区域。

我有许多与此模型相关的模型和控制器,在仪表板中我需要能够对所有帖子/用户/新闻等进行 CRUD。

显然我需要构建一个带有一些索引操作的仪表板控制器,它将显示仪表板“主页”页面。

我的问题是:将所有其他操作放在哪里——对于帖子/用户/其他添加/编辑的东西? 我应该将所有这些操作放在这个新的仪表板控制器中,还是最好将此操作放在相关控制器(帖子/用户..)中?

【问题讨论】:

    标签: php cakephp


    【解决方案1】:

    将您的特定操作保存在各自的控制器中。 DashbaordsController 适用于需要显示大量不同模型信息的任何页面,但 CRUD 操作应保存在它们自己的 Controller 中。

    如果您希望/需要单个页面能够在该页面上实际执行 CRUD 操作,您可以使用 ajax 并仍然调用该特定控制器的操作。

    归根结底,如果您尝试将所有 CRUD 放入单个控制器中,它只会变得一团糟,并且会让未来的程序员(包括 6 个月后的您自己)感到非常困惑。

    包含来自其他模型$this->loadModel('MyModel'); 的数据非常容易,因此在它们各自的控制器中执行 CRUD 操作并不是什么大问题。再一次 - DashboardsController 仍然适用于那些真正像仪表板并且与特定模型没有联盟的页面。但不是针对每个模型的 CRUD。

    【讨论】:

    • 谢谢。但是,如果我希望与管理区域相关的所有方法都使用特定的布局,我应该将 ..->layout(admin) 放在每个方法中还是有更简单的方法来绑定要使用的方法组具体的视图布局?我知道我可以使用 BeforeFilter/BeforeRender,但是我在当前控制器中的所有方法都将使用这个管理布局..
    • 在您的beforeFilter 中,您可以执行if (isset($this->request->params['admin'])) { $this->layout = 'admin'; } 之类的操作 - 这仍然可以让您根据需要覆盖每个管理员操作。 (如果你使用 beforeRender,你就不能使用特定于方法的布局——我想!)。
    • @user1604153 - 已被多次询问和回答,包括此处:stackoverflow.com/questions/4180655/… - 但您不理解或无法弄清楚,您应该问另一个问题,而不是添加为评论..
    【解决方案2】:

    一般来说,理想的方法是做瘦控制器并将逻辑保持在尽可能靠近模型的堆栈中。理想情况下,您希望引入用于代码重用和测试的库。 Robert Martin aka Uncle Bob 说,网络交付和数据库应该尽可能多地成为一个插件。这使您可以更好地进行单元测试。就您的特殊情况而言,我希望尽可能将其保持在 REST 附近,以便分离控制器,理想地委派给一些较低级别的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-21
      • 2023-04-04
      • 2017-06-18
      • 1970-01-01
      • 2023-03-24
      • 2015-02-02
      相关资源
      最近更新 更多