Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CodeIgniter中的控制器旁路是否被视为良好实践?_Php_Codeigniter - Fatal编程技术网

Php CodeIgniter中的控制器旁路是否被视为良好实践?

Php CodeIgniter中的控制器旁路是否被视为良好实践?,php,codeigniter,Php,Codeigniter,直接调用视图中的模型类是否是最佳做法?目前我正在使用CodeIgniter开发一个应用程序。在我的应用程序的不同视图中,我包含了我想要从数据库中提取的菜单。现在的问题是,我正在通过控制器将值传递给菜单。如果我创建一个公共模型类并从视图和旁路控制器调用它。这样,将有一个对模型的调用,它将立即从数据库加载菜单,并绕过控制器。这样做会带来什么利弊?在我看来,不,这不是最好的做法。视图应该联系控制器,控制器应该从模型中检索数据,模型执行所有逻辑。控制器应该是视图和模型的粘合剂或中间人 控制器将返回的数据

直接调用视图中的模型类是否是最佳做法?目前我正在使用CodeIgniter开发一个应用程序。在我的应用程序的不同视图中,我包含了我想要从数据库中提取的菜单。现在的问题是,我正在通过控制器将值传递给菜单。如果我创建一个公共模型类并从视图和旁路控制器调用它。这样,将有一个对模型的调用,它将立即从数据库加载菜单,并绕过控制器。这样做会带来什么利弊?

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

控制器将返回的数据传递到视图中,然后执行foreach循环或任何显示它的操作


视图不应执行任何逻辑。从数据库中检索数据有些逻辑性。

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

不会有任何问题,因为您使用的是一个公共控制器


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

使用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\u控制器

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

你试过调用视图中的模型吗?是的,我做了一个测试用例来调用视图中的conroller,我可以。我知道所有MVC逻辑的东西(我不需要解释)。你们没明白我的问题。问题是在我的应用程序中有太多的视图,在每个视图中,我都包括顶部菜单,在每种情况下,控制器都会查询数据库并拉顶部菜单。如果我将通过控制器而不是顶部菜单,它将查询一次数据库,并在每次打开视图时保存对数据库的过多调用。我只是需要一个真诚的意见,这样做是可以的,或者我不会这样做,必须使用控制器,为什么?实际上我是正确的MVC实现(不是像CodeIgniter那样的废话)。视图实例负责从模型层获取信息。然后,当前视图使用此信息来决定使用哪些模板来创建响应。视图不是模板。已同意。但视图不应该做任何逻辑操作,控制器应该做。