Cakephp标准-它是在控制器中编写内容的合适标准吗

Cakephp标准-它是在控制器中编写内容的合适标准吗,cakephp,cakephp-2.0,Cakephp,Cakephp 2.0,对不起,这个基本问题。以下是my Userscontroller.php中提供的代码 public function register() { //Setting some data $this->User->create(); $this->User->save($this->request->data) } public function edit() { //Setting some data $this->User->

对不起,这个基本问题。以下是my Userscontroller.php中提供的代码

public function register()
{
  //Setting some data
  $this->User->create();
  $this->User->save($this->request->data)
} 

public function edit()
{
  //Setting some data
  $this->User->save($this->request->data)
} 

public function admin_add()
{
  //Setting some data
  $this->User->create();
  $this->User->save($this->request->data)
} 

public function admin_edit()
{
  //Setting some data
  $this->User->save($this->request->data)
} 
我的一位大四学生审查了这段代码,说上面的代码不符合CAKEPHP标准。业务逻辑需要转移到模型

在模型中如下所示

<?php 
class User extends AppModel {
  //Validation parts

     public functions savingData($data =array(), $id=false)
    {
       if($id == false)
       {
         $this->create();
       }
       $this->User->save($data)
    }
}?>


和在控制器中,他要求调用这个“强> SaveDebug < /强>函数来创建和更新选项

,通常任何验证或保存数据到其他表的方法或任何使动作大于一页的额外功能,您需要考虑它(将函数拆分为较小的函数)。您可以根据自己的需要将此功能放入模型或组件中。我可以说fat模型的概念和组件用于这种情况

我相信方法不应该超过一个页面,这使得应用程序可以为下一个开发人员维护

此外,任何静态方法都可以作为一个类在实用程序内部,该类可以从控制器或视图调用。。。很容易

请记住,Cake有许多模型行为,这些行为包含在所有模型中。如beforeSave()、afterSave()、initiate()、before和after delete()、

最后,如何实现OOP、整洁和可维护的应用程序完全取决于您

另一个例子是想象一辆汽车

所有的引擎和完成的东西都在盒子里,你看不见,你可以叫它模型。 控制器的东西在你的面前,所以你可以控制它控制器


如果有人能在这个答案中添加更多选项供其他人学习,希望这会有所帮助。

一般来说,你的老板是正确的,因为他的目标是胖模特——瘦控制器。这样做的原因是,如果在您的工作中,他们正在进行单元测试(我希望他们是这样),这将使您的工作更加轻松。在控制器中进行测试是一件很麻烦的事


话虽如此,但控制器中的代码可以忽略不计,因此不知道他所问的是否是“必要的”,只是技术上与当前标准不一致(无论如何都会随时间而变化)。底线如果你对他/她提出的批评感到烦恼,尽量不要生气。像这样的事情不是一成不变的,在很大程度上是由解释决定的。

在MVC中,业务规则是由模型决定的

但在您的示例中,并没有任何业务逻辑,所以您的代码在控制器中是正确的


我建议使用cakephp控制台创建控制器和模型,您可以自己创建。

阅读idea:Fat models and skinny controllers我同意Fat models and skinny controllers,但我不同意这个函数,对我来说,这几乎是无用的。嘿@Сачаачааааааааааааааааа,这就是我的观点。你有没有关于肥胖模型和皮肤控制器的例子肥胖模型和皮肤控制器更像是一个概念,而不是一个实际的例子。可以放在模型中的每个功能都应该存在。在模型内部尽可能多地执行逻辑,以保持控制器干净且易于阅读。控制器应仅使用模型中定义的工具。当然,这不是一个严格的规则,所以当你觉得一个解决方案在控制器中更好时,就去做。这更像是你要做的任何数据操作,都应该在模型中完成。例如,经典的“FindTop5RecentPosts”可以作为模型中的包装函数来完成,以减轻控制器的负担