控制器到底有多瘦?我理解将所有业务逻辑放在模型中,但其他事情呢。
例如,假设我正在撰写一个博客网站,每个用户都可以拥有多个帖子。目前,用户将通过访问posts控制器并运行create action来创建帖子。以下是目前会发生的一些小样本。
class Controller_Post extends Controller {
function action_create() {
if ( ! empty($_POST)) {
$post = new Model_Post;
$post->user_id = $this->logged_in_user->id;
$post->values($_POST);
if ( ! $post->create()) {
echo 'Error';
}
else
{
echo 'Saved';
}
}
}
}
我的问题是,什么会阻止我将上述逻辑放在用户模型中,就像这样。
class Model_User extends Model {
function create_post($post) {
$post = Model::factory('post')->values($post);
$post->user_id = $this->id;
if ( ! $post->create()) {
return FALSE;
}
else
{
return TRUE;
}
}
}
如果以这种方式完成,控制器将比我放置的更小。这对我来说更有意义,因为用户是创建帖子的人,所以我认为它应该在用户模型中,而不是控制器。
如果有帮助,我使用Kohana框架。
由于
答案 0 :(得分:4)
控制器应该引导流量。模型适用于业务逻辑的位置,因此通常您的第二个示例是“正确的mvc”。
基本上控制器应该做的是请求输入,告诉模型改变状态(他们自己做实际的状态改变),并确定要显示的视图(如果有的话)。
我有很多控制器,就像这样:
class Controller_Foobar extends Controller
{
public function action_index() {}
}
如果他们需要处理$ _POST输入,他们会抓取这些数据,并将其发送到模型,然后发送到视图。
将所有逻辑保留在模型中可以让您轻松地重复使用它,并且它更易于维护和测试。