代码之家  ›  专栏  ›  技术社区  ›  AnNaMaLaI

Cakephp标准-在控制器中写东西是正确的标准吗

  •  5
  • AnNaMaLaI  · 技术社区  · 11 年前

    对不起,这个基本问题。以下是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)
        }
    }?>
    

    在控制器中,他要求将其称为 保存数据 创建和更新选项的函数

    3 回复  |  直到 11 年前
        1
  •  3
  •   Mohse Taheri    10 年前

    在MVC中,业务规则是模型化的。

    但在您的示例中,没有任何业务逻辑,因此代码处于控制器中是正确的。

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

        2
  •  0
  •   Fury    11 年前

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

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

    此外,任何静态方法都可以作为一个可以从控制器或视图调用的类在Utility中。。。容易地

    记住,Cake有很多模型行为,这些行为包含在所有模型中。如beforeSave()、afterSave(),initiate(),delete()前后,。。。

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

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

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

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

        3
  •  0
  •   GatorGuy023    10 年前

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

    尽管如此,你的控制器中的代码是可以忽略的,所以不知道他所问的是否“必要”,只是技术上与当前标准不一致(无论如何,标准会随着时间而变化)。底线是,如果你对他/她提出的批评感到困扰,尽量不要这样做。像这样的事情不是板上钉钉的,在很大程度上要留待解释。