我是 CodeIgniter 的新手,我刚刚阅读了他们的一些用户指南,以帮助我了解如何使用多个 Controller 。
我已经弄清楚如何使用他们的示例之一加载多个页面。这是我的默认 Controller ,称为 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
时,我有一些 View 可以正确加载。
现在,进一步了解 Controller 和 URI 路由。我创建了一个新的 Controller ,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');
}
}
问题是,我不知道如何访问此页面。
我知道默认的 URI 模式是 example.com/class/function/id/
但我已经尝试过 localhost/website/mycontroller
但它不起作用。 Apache 返回 404。我已经尝试了很多操作,甚至像输入 localhost/website/index.php/mycontroller
一样愚蠢,但当然这不起作用。
多 Controller 的正确使用方法是什么?我在这里做错了什么?求助于我的学习,谢谢!
(此外,这是我在 StackOverflow 上的第一个正确问题,如果我做错了什么或格式不正确,请告诉我!)
最佳答案
问题是这个规则:
$route['(:any)'] = 'site/index/$1';
拦截一切...并将其传递给Site
Controller ,作为index
方法的参数。所以如果你打电话:
/mycontroller
它实际上会映射到:
/site/index/mycontroller
路由发生在应用甚至查看 Controller 之前,并且路由规则按编写顺序考虑。
因此,您需要将此规则放在规则列表的最底部,以便让其他规则起作用。所以通过在前面添加:
$route['mycontroller'] = 'mycontroller';
$route['(:any)'] = 'site/index/$1';
它应该可以正常工作(虽然有点不寻常的方法,但你的全局 any
规则也是如此)因为它会首先检查请求的 URL 是否是 /mycontroller
如果是的话, 它会调用 myController
;否则它的行为将与您的 Site
Controller 一样。
关于php - 你如何在 CodeIgniter 中使用多个 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31073491/