【问题标题】:Kohana 3.3 - how to correctly move controller function to modelKohana 3.3 - 如何正确地将控制器功能移动到模型
【发布时间】:2014-08-05 15:00:21
【问题描述】:

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

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

如果主要功能位于模型中,我应该如何创建此日志条目并发送邮件?我应该从第一个模型中实例化第二个模型,调用 log 函数,然后按照我从控制器中所做的那样发送邮件吗?

提前致谢。

【问题讨论】:

  • 听起来你最好创建一个库类。这只是在应用程序的 classes/libraries 目录中创建的常规类。在库中,您的方法可以执行逻辑和调用模型,并且可以从任何控制器访问。
  • 听起来很有趣。我会试试看。我对未来我应该在多个控制器中需要实现时使用库函数并且它不仅与模型相关吗?
  • 你可以在网上搜索“repository”找到更多信息。这将所有数据库逻辑从您的控制器中移除,您可以在不同的控制器上重用这些方法。

标签: kohana kohana-3 kohana-3.3


【解决方案1】:

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

在其基础 MVC 中使用:ModelsViewsControllers

模型 这些类应该代表数据库中的实体

例子:

Model_User 映射到您的 Users 表中的实体

$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();
    }

}

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

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

例子:

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

Social_Login_Service::facebook($user_email);

现在您只会在登录控制器中看到一条干净的线,而不是一堆杂乱无章的逻辑,这些逻辑会堆积在您的控制器中,直到它融化您的大脑才能看到。

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

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

我希望这个小 sn-p 能有所帮助。

【讨论】:

    猜你喜欢
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多