在CodeIgniter中绕过控制器会被认为是一种好的做法吗?


Would bypass of the controller in CodeIgniter be considered a good practice?

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

使用codeigniter,您的视图不应该关心数据从哪里来,只关心它是否存在。只有你的控制器应该与你的模型直接接触。

这听起来像是你有一个通用的菜单,你想加载到你的视图中,你不想在所有的控制器中复制这个代码。

要解决这个问题,你需要创建一个公共控制器,你的主控制器从它继承一个方法来获取菜单。

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

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);
    }
}

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

控制器将返回的数据传递给View,然后你执行foreach循环或其他方法来显示它。

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

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

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

相关文章: