我想知道,如果我遵循CakePHP框架中的最佳开发实践。
如果你有一个发票表的例子,并且你想要显示发票的状态,那么假设你想要一张发票状态的绿色标签,如下所示:
<span class="green">Paid</span>
我所做的是以下内容。我在名为statuslabel的模型上创建了一个虚拟字段,在该虚拟字段中,我调用了一个显示元素的Helper。
因此它将是Model-&gt; Helper-&gt; Element
在我的应用程序的任何地方,我都可以调用statuslabel,就像它是该模型中的字段一样,我将获得statuslabel。
我最大的疑问是,这是正确的做法,还是我做错了?
答案 0 :(得分:0)
您应该避免违反代码中的MVC原则,在这种情况下,特别是在模型代码中包含表示逻辑。这同样适用于CakePHP和其他MVC框架。
您仍然可以继续创建一个名为status
的虚拟字段,该字段可以根据其他实体字段计算发票的状态。如果您已将状态存储在数据库中作为普通实体字段,则可以跳过虚拟字段。
视图图层是您想要所有演示文稿代码的位置。您可以直接在视图中执行此操作,也可以将逻辑移动到帮助程序。帮助程序中的相应函数会将您的状态字段作为输入,并根据状态值将适当的类输出到模板中。
在视图层(CakePHP中的模板和辅助类)中保留表示代码的优点是,以后通过更新模板很容易替换它。 CakePHP 3还为您提供了通过插件创建themes的选项,这样您就可以轻松地动态更改应用程序的UI,但前提是您坚持MVC的设计原则。
答案 1 :(得分:0)
通常使用虚拟字段并不是一个坏主意。有时,简单答案背后的逻辑非常复杂,无法通过SQL或合理数量的SQL来完成。
重要的是要记住,大多数情况下,如果没有额外的PHP处理,直接使用查询会更快。那么对于你的问题,如果你没有任何PHP逻辑(除了生成SQL表达式),我会说它继续...但是...
......还有关于数据库设计的讨论点。
我无法真正说出问题背后的数据库架构,但对我而言,发票状态这样简单的事情应该直接在数据库中作为和int type字段。那么关于发票系统的经验,数据库模式可能是这样的:
如果您创建了模型关联并正确查询了数据库,则最终会在查询结果中显示发票状态,您可以像描述的那样使用它。
顺便说一下。大多数时候,使用可重用元素是很好的做法。维护的代码较少:D