我还有一个关于Kohana的问题以及我应该如何使用模型函数。
我想将控制器功能的一部分移动到更合适的模型中,以便能够从其他控制器访问此功能。 (从我到目前为止所读到的内容,我得出结论,从不同的控制器调用控制器功能被认为是糟糕的架构)。 我的问题是,根据几种情况(即模型参数),此控制器功能在不同的数据库表中创建日志条目,并向某些用户发送电子邮件。
如果主要功能位于模型中,我应该如何创建此日志条目并发送邮件?我是否应该从第一个模型中实例化第二个模型,调用日志函数,然后发送邮件与我的控制器完全相同?
提前致谢。
答案 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)这样做非常好。
我希望这个小片段有所帮助。