Kohana 3.3 - 如何正确地将控制器功能移动到模型

时间:2014-06-15 18:14:16

标签: kohana kohana-3 kohana-3.3

我还有一个关于Kohana的问题以及我应该如何使用模型函数。

我想将控制器功能的一部分移动到更合适的模型中,以便能够从其他控制器访问此功能。 (从我到目前为止所读到的内容,我得出结论,从不同的控制器调用控制器功能被认为是糟糕的架构)。 我的问题是,根据几种情况(即模型参数),此控制器功能在不同的数据库表中创建日志条目,并向某些用户发送电子邮件。

如果主要功能位于模型中,我应该如何创建此日志条目并发送邮件?我是否应该从第一个模型中实例化第二个模型,调用日志函数,然后发送邮件与我的控制器完全相同?

提前致谢。

1 个答案:

答案 0 :(得分:0)

遗憾的是,这是一个没有正确答案的问题。很大程度上取决于您希望如何实现MVC模式。

其基础MVC使用:模型视图控制器

<强>模型 这些类应代表数据库中的实体

示例:

Model_User 映射到用户表格中的实体

$user = new Model_User;
$user->first_name = 'Joe';
$user->last_name  = 'Smith';
$user->save();

<强>视图 这些文件存储演示文稿数据/模板(通常/主要是html)

示例:

<强>在index.tpl

<h1>HELLO, WORLD!</h1>
<h2><?=$some_variable_from_controller?></h2>

<强>控制器 这些文件处理传入的请求和处理数据以注入视图

示例:

Controller_Home 处理对主页的请求

class Controller_Home extends Controller {

    public function action_index(){
       $view = View::factory('index');
       $view->render();
    }

}

现在您已经掌握了基础知识,现在是时候了解这种有限结构促进的特定问题了。控制器变得肥胖和凌乱。这导致我们面向服务的架构

这些库允许我们将大量逻辑组移动到便携式服务层,可以轻松地在所有控制器,模型和其他库中使用。他们还将我们的代码分解成更小的更简洁的块,这些块实际上是有意义的。

示例:

在我的控制器中,而不是使用一堆逻辑来记录用户通过facebook我可以简单地创建 Social_Login_Service 并按如下方式使用它。

Social_Login_Service::facebook($user_email);

现在你只需要在你的登录控制器中看到1条干净的线,而不是整个乱七八糟的逻辑,这些逻辑将堆积在你的控制器中,直到它融化你的大脑来观察。

这是一个可能的方向(我更喜欢的方向)的基本概述。

将您的网站拆分为较小的组件是非常有用的,如果您使用Kohana,我建议您使用模块(http://kohanaframework.org/3.1/guide/kohana/modules)这样做非常好。

我希望这个小片段有所帮助。