【问题标题】:CakePHP - centralizing controller logicCakePHP - 集中控制器逻辑
【发布时间】:2011-10-05 20:09:18
【问题描述】:

使用 CakePHP,我发现我在控制器操作之间复制了一些代码。我有十几个操作(属于各种控制器)都需要运行相同的查询和set() 相同的 10 个变量以在特定布局中使用。他们还需要以相同的方式处理任何错误并呈现错误页面。

我知道组件旨在集中控制器之间使用的逻辑,但就我而言,此逻辑需要访问控制器的 set()render() 方法。针对这种情况的建议方法是什么?

谢谢,布赖恩

【问题讨论】:

    标签: cakephp controller


    【解决方案1】:

    将逻辑放入您的控制器应从其扩展的 AppController 类中。

    查看文档:http://book.cakephp.org/view/957/The-App-Controller

    【讨论】:

    • 即使这个逻辑只被我的一小部分控制器使用?
    • 您可以有一个扩展 AppController 的中间类,然后将您的函数放在那里,然后您的控制器将从该类扩展。例如MyController 扩展 IntermediateController 扩展 AppController
    • 是的,除了即使在控制器中,也只有一个操作可能需要此功能。如果其他操作需要自己的类似逻辑,我将无法扩展两个中间控制器。
    【解决方案2】:

    最终在这一层上滚动了我自己的业务逻辑层。下面的例子。欢迎提出想法/cmets。

    class MyController extends AppController {
    
      public function my_action() {
    
         //  The BLL class is specific for this action and gets the entire 
         //  controller so has access to the set() method as well as components.
         $this->Bll = new MyActionLogic($this);
         $this->Bll->do_whatever();
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-16
      • 2017-08-08
      • 1970-01-01
      相关资源
      最近更新 更多