Cakephp:如何在不同的控制器中重用代码

时间:2014-03-16 16:56:18

标签: cakephp

我有一些控制器,它使用相同的代码构思,只在呼叫模型

时有所不同

例如:

  • 在bookscontroller中:

    public function abc(){ $this->Book->find(....); }

  • 在categoriescontroller中:

    public function abc(){ $this->Category->find(....); }

我觉得太浪费了。所以,请教我如何只编写一个函数,但它可以在任何控制器中调用并加载相同的模型。

非常感谢:)

2 个答案:

答案 0 :(得分:1)

如果您认为需要干燥(不要重复自己),请使用组件。 他们可以在控制器之间共享代码。

在您的情况下,您可能还想查看crud plugin,它会进一步采用基本的CRUD。

答案 1 :(得分:0)

  

我觉得太浪费了。那么,请教我如何只写一个   函数,但它可以在任何控制器中调用并加载相同的模型。

您已回答了一半问题: DON' T 将代码放入控制器中。与数据操作和提取相关的所有内容都应该进入模型,而不是控制器。

假设您在书籍控制器和书籍属于类别,您可以从那里打电话:

$this->set('someCategoryData', $this->Book->Category->yourCustomMethod());
$this->set('categories', $this->Book->Category->find('list'));

需要来自类别控制器的书吗?

$this->set('book', $this->Category->Book->view($bookId));

您应该通过关联获取数据,并为您的数据检索和操作任务提供模型方法。

使用组件内部逻辑调用1000个模型的组件显然是错误的方法。 Read about SoC