在CakePHP中放置某些逻辑的位置

在CakePHP中放置某些逻辑的位置,php,cakephp,separation-of-concerns,Php,Cakephp,Separation Of Concerns,我最近开始用CakePHP重写几年前做的一个项目。这一次,我试图把所有事情都做到“正确”,所以也许有人会给我一个关于做以下事情的指示: 我在视图中使用Model->find('all')从一个表中显示一个简单的表。此表中有两个布尔字段,它们共同构成了我需要向用户显示的内容。所以:0x0='A',1x0='B',0x1='C',1x1='D'。我应该把这个逻辑放在哪里?我一直在考虑以下方法: 景色 视图辅助对象 控制器 模型中的某些内容,以便Model->find('all')输出此值(这可能吗?

我最近开始用CakePHP重写几年前做的一个项目。这一次,我试图把所有事情都做到“正确”,所以也许有人会给我一个关于做以下事情的指示:

我在视图中使用Model->find('all')从一个表中显示一个简单的表。此表中有两个布尔字段,它们共同构成了我需要向用户显示的内容。所以:0x0='A',1x0='B',0x1='C',1x1='D'。我应该把这个逻辑放在哪里?我一直在考虑以下方法:

  • 景色
  • 视图辅助对象
  • 控制器
  • 模型中的某些内容,以便Model->find('all')输出此值(这可能吗?)
  • 这个任务可能看起来很琐碎,但我认为它可能会让我从一开始就学会如何组织和维护这个项目


    谢谢

    在控制器中!来自模型的方法进入控制器。该视图仅用于输出(如HTML UI编程)。

    如果您要在模型中的所有位置使用它,我会将其放在模型中。您可以在模型上放置一个返回该值的方法,也可以在回调中检索到的所有行上循环,并将其设置为正确的字段

    好吧,这取决于组成最终表格的逻辑类型(是表示还是业务?)

    假设您添加了新类型的UI,例如命令行界面。你会如何在那里展示你的桌子?对于HTML和控制台演示文稿,传递到视图的数据必须相同。所以,负责准备数据的逻辑是业务逻辑,应该放在模型中。负责显示数据的逻辑应该放在视图中(如果多次使用,可能放在视图助手中)


    永远不要把这种逻辑放在控制器中。

    如果它是决定渲染风格的东西,我会把这种逻辑放在视图中。这样,设计师就拥有了最大的访问权限,并可以相应地设计样式


    另一方面,如果这两列只是为了方便数据建模而存在,则将其放入模型中。设计师甚至不应该意识到其他的可能性

    控制器确实是最糟糕的地方。它的职责只是处理请求。你需要瘦控制器和胖模型。是的,在模型中,业务逻辑应该是。我同意。如果这只是与表格的渲染方式有关,请将其放置到ViewHelper中。但是,如果这是一个与模型状态相关的信息,请将其放在模型中,为每个组合状态指定一个名称,并通过getter访问它。我会把它放在afterFind回调中,以获得一个很好的干支持