【问题标题】:Codeigniter -- working with multiple controllersCodeigniter——使用多个控制器
【发布时间】:2013-06-27 15:02:20
【问题描述】:

我有一个关于控制器的问题。让我们开始吧:

  • 我有一个名为“admin.php”的主控制器,它有一个用于公司、用户管理等的菜单。菜单上的每个项目都有单独的 PHP 文件来保存不同类型的数据[我似乎很长将它们组合起来全部在一个 php 中。

所以对于这个例子:

我有 3 个控制器:admin.php、company.php、usermanagement.php

我想要的是,将公司和管理控制器链接为 admin 的子级。所以如果在浏览器上输入地址,可能会是:localhost/admin/company and localhost/admin/usermanagement

我配置了路线,这很好,但是当我输入“localhost/company”时,它会加载我不想加载的公司页面。我想将它们全部链接为管理页面的子项。

我将如何实现这一目标?

顺便说一下,这是我的代码的 sn-p:

admin.php - 控制器

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Admin extends CI_Controller {

    function __construct(){
        parent::__construct();

        session_start();
    }

    public function index() {
          $this->load->view('view_admin');
       }
}

公司 - 与管理员相同

  <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

    class Company extends CI_Controller {

        function __construct(){
            parent::__construct();

            session_start();
        }

        public function index() {
              $this->load->view('view_company');
           }
    }

谢谢, 詹姆斯

编辑:我尝试在 admin.php 上添加函数,例如:

函数公司(){} 函数用户管理(){}

但我想它并没有那么有效,因为稍后当我尝试将我的原生 php 代码迁移到这个 MVC 架构框架中时,它会包含很多功能。

【问题讨论】:

    标签: php codeigniter controller routes uri


    【解决方案1】:

    如果您的问题是您喜欢路由的工作方式,但不希望人们能够访问 index.php/company/,而是希望他们访问 admin/company,您可以随时这样做:

    class Company extends CI_Controller {
        public function __construct() {
            parent::__construct();
            if ( $this->uri->segment(1) != "admin" ) {
                redirect('admin/company/'.$this->uri->segment(3));
            }
        }
    
    ...
    

    尽管请记住,您可能需要一种比添加$this-&gt;uri-&gt;segment(3) 更完整的 URL 形成方法,但一般模式已经存在。

    【讨论】:

    • 完美。这就是我要找的。但是,我有一个问题,为什么它会在重定向部分引发错误?如果我删除它,一切正常。我还自动加载了 uri,但该行仍然会引发错误。
    • 您需要加载 URL 帮助程序才能使用 redirect() ellislab.com/codeigniter/user-guide/helpers/url_helper.html
    • 哦,它们已加载。我的意思是,如果我在重定向中添加此代码,它将引发错误:$this-uri->segment(3)
    • 对不起,这是我的错字。它应该是$this-&gt;uri-&gt;segment(3),经过编辑以反映。
    • 我没有注意到那个错字。大声笑..顺便说一句,感谢您的帮助。它有很大帮助。除了文档之外,您是否知道任何文章可以提高我对 codeigniter 的了解?
    【解决方案2】:

    您可以在“管理员”控制器中添加更多功能,因此,默认页面是:

     public function index() {
                  $this->load->view('view_admin');
               }
    

    “子页面”是:

     public function company() {
                  $this->load->view('view_company');
               }
    

    等等等等……

    【讨论】:

    • 我试过了。但这并不有效,因为我需要稍后在项目中编写更多代码,并且以后往往会使我感到困惑。我是 MVC 架构的新手,我以前的网站来自原生 php。
    猜你喜欢
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 2011-11-06
    • 2016-03-30
    相关资源
    最近更新 更多