Laravel MVC概念

时间:2015-05-03 20:26:45

标签: laravel model-view-controller

我仍然习惯MVC概念,但我理解它的基本概念。 我在" PHP"上发现了这段代码。博客。

<?php
class Todo_Controller extends Base_Controller
{
    public function action_list() {
        $todos = Todo::all();
        return View::make("list")
                ->with("todos", $todos);
    }

    public function action_view($id) {
        $todo = Todo::where_id($id)->first();
        return View::make("view")
                ->with("todo", $todo);
    }

    public function action_delete($id) {
        $todo = Todo::where_id($id)->first();
        $todo->delete();
        return View::make("deleted");
    }

    public function action_new() {
        return View::make("add");
    }

    public function action_add() {
        $todo = new Todo();
        $todo->title = Input::get("title");
        $todo->description = Input::get("description");
        $todo->save();
        return View::make("success");
    }
}

这是一个控制器,但我注意到 action_list(),action_view()和action_delete()正在运行SQL,但它是在控制器中执行的。 这是为什么?不应该在模型中吗? 模型的目的不是做任何相关的数据吗?

我之所以这样问是因为我看过很多laravel教程,付费和无薪教程都是这样做的,我问自己,为什么要将业务逻辑与数据模式混合在一起?

1 个答案:

答案 0 :(得分:0)

您可以使用存储库模式从控制器中提取数据查询。

getTwitterFollowersIDsCollectionsClient : function (screenname){
  Meteor.setTimeout(function(screenname){
    T.get('followers/ids', { screen_name: screenname }, Meteor.bindEnvironment(function (err, data, response) {
    console.log("from getTwitterFollowersIDsCollectionsClient : "+data.ids);

    var vids = data.ids;
    for(var i in vids)
      {
        TwitterFollowersIDsCollecions.insert({
          twitterFollowerID:vids[i]
        });
      }

    return data;
  }));

  },10);
  return;
}

然后将存储库注入控制器。这样,如果你改变数据库,或者说沟通,那么你只需要编写一个具有相同界面的新存储库,然后只需更改注入。

class TodoRepository {

    public function get_todo($id)
    {
        return Todo::find($id);
    }

    public function get_all_todos()
    {
        return Todo:all();
    }

    public function create_todo($todo)
    {
        return Todo::create([
            'title'  => $todo['title'],
            'description' => $todo['description']
        ]);
    }

    public function delete_todo($todo)
    {
        return Todo::find($todo)->delete();
    }
}

这是你的控制器并不关心get_all_todos或delete_todo,它只是要求存储库获取/修改数据然后返回结果。