php – 如何在CodeIgniter中使用多个控制器?
我是CodeIgniter的新手,我刚刚通过他们的一些用户指南来帮助我了解如何做多个控制器.
我已经想出如何使用他们的一个示例加载多个页面.这是我的默认控制器,名为Site.php: class Site extends CI_Controller { public function index($page = 'home') { if ( ! file_exists(APPPATH.'/views/'.$page.'.php')) { // Whoops,we don't have a page for that! show_404(); } $data['title'] = ucfirst($page); $this->load->view('header',$data); $this->load->view($page,$data); $this->load->view('footer',$data); } } 这一切都适用于我的routes.php: $route['default_controller'] = 'site'; $route['(:any)'] = 'site/index/$1'; 例如,当我访问localhost / website / index.php / about时,我有一些正确加载的视图. 现在,进一步了解控制器和URI路由.我创建了一个新的控制器,application / controllers / MyController.php,它的编码如下: class MyController extends CI_Controller { public function index() { $this->load->view('header'); $this->load->view('my_controller'); $this->load->view('footer'); } } 问题是,我不知道如何访问此页面. 使用多个控制器的正确方法是什么?我在这做错了什么?请帮助我学习,谢谢! (另外,这是我在StackOverflow上的第一个正确的问题,如果我做错了什么或格式化错误,请告诉我!) 解决方法
问题是这条规则:
$route['(:any)'] = 'site/index/$1'; 拦截所有内容…并将其作为索引方法的参数传递给站点控制器.所以如果你打电话: /mycontroller 它实际上将映射到: /site/index/mycontroller 路由在应用程序查看控制器之前发生,并且路由规则在编写时被考虑. 因此,您需要将此规则放在规则列表的最底部,以便让其他规则起作用.所以在前面加上这个: $route['mycontroller'] = 'mycontroller'; $route['(:any)'] = 'site/index/$1'; 它应该可以正常工作(尽管是非常不寻常的方法,但你的全局规则也是如此),因为它首先检查所请求的URL是否是/ mycontroller,如果是,它将调用myController;否则它将表现得像您的站点控制器一样. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |