绕过CodeIgniter中的控制器会被认为是一种好习惯吗?

时间:2013-03-21 13:23:50

标签: php codeigniter

直接调用View里面的Model类是不是最好的做法?目前我正在使用CodeIgniter开发一个应用程序。在我的应用程序的不同视图中,我包括我想从数据库中提取的菜单。目前我正在通过控制器将值传递给菜单。如果我创建一个通用模型类并从View和pass控制器调用它。因此,将有一次对Model的调用,它将立即从数据库加载菜单并通过控制器。通过这样做,利弊会来吗?

4 个答案:

答案 0 :(得分:2)

使用codeigniter,您的视图不应该关注数据来自哪里,只关注数据存在。只有您的控制器应与您的模型直接联系。

听起来您想要在视图中加载一个通用菜单,并且您不希望在所有控制器上复制该代码。

要解决此问题,您需要使用获取菜单的方法创建主控制器继承的公共控制器。

My_Controller需要保存到core目录中的application文件夹。

class MY_Controller extends CI_Controller
{
    protected function get_menu()
    {
        // Load your menu here
        $this->load->model('menu_model');
        return $this->menu_model->get_menu();
    }
}

所有主要控制器都将继承MY_Controller

class Home_Controller extends MY_Controller
{
    public function index()
    {
        $page_data = array('menu' => $this->get_menu());
        $this->load->view('home/index', $page_data);
    }
}

答案 1 :(得分:0)

在我看来,这不是最好的做法。视图应该联系控制器和控制器应该从模型中检索数据,其中模型执行所有逻辑。控制器假设是View和Model的粘合剂或中间人。

Controller将返回的数据传递给View,然后执行foreach循环或其他任何显示它。

查看不应该做任何逻辑。从数据库中检索数据有些逻辑。

答案 2 :(得分:0)

这是最糟糕的做法。那么为什么我们有MVC的控制器概念。 :)主要是所有逻辑都进入模型,因此不能直接调用模型。

答案 3 :(得分:-1)

没有任何问题,因为您使用的是通用控制器。

注意:您不应直接从视图中调用模型。