-2

直接调用 View 内的 Model 类是否是最佳实践?目前我正在使用 CodeIgniter 开发应用程序。在我的应用程序的不同视图中,我包含了我想从数据库中提取的菜单。事情是目前我正在通过控制器将值传递给菜单。如果我创建一个通用模型类并从视图中调用它并通过控制器。这样就会有一个对 Model 的调用,它会立即从数据库中加载菜单并通过控制器。这样做会有什么好处和坏处?

4

4 回答 4

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);
    }
}
于 2013-03-21T13:44:52.657 回答
0

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

于 2013-03-21T13:34:24.767 回答
0

在我看来,不,这不是最佳实践。视图应该联系控制器,控制器应该从模型中检索数据,其中模型完成所有逻辑。控制器假设是视图和模型的粘合剂或中间人。

控制器将返回的数据传递给 View,然后你执行你的 foreach 循环或任何显示它的操作。

视图不应该做任何逻辑。从数据库中检索数据有点逻辑。

于 2013-03-21T13:28:30.580 回答
-1

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

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

于 2013-03-21T13:37:23.740 回答