php - 你如何在 CodeIgniter 中使用多个 Controller ?

标签 php codeigniter controller

我是 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/

相关文章:

php - php 和 mysql 的注册页面不工作

php - 多个模型未加载到 codeigniter 中的同一 Controller 中

asp.net - 在asp.net mvc中是否可以制作通用 Controller ?

javascript - Sitecore - 如果项目为 NULL,则渲染代码

PHP 错误 : "Cannot pass parameter 2 by reference"

php - 如何更改phpmailer中的字体?

css - codeigniter 和添加样式表

php - CodeIgniter 打开主页时出错

javascript - 组件 Ember 的设置 Controller

php - 从 PHP 编写 CKEditor 编辑的 HTML 文件