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