【问题标题】:Custom Controller being called when it shouldn't be不应该调用自定义控制器
【发布时间】:2014-11-20 00:34:33
【问题描述】:

使用 CodeIgniter,我有几个自定义控制器:

  • MY_Controller - 这扩展了 CI_Controller
  • Front_Controller - 扩展 MY_Controller,用于任何面向“用户”的页面
  • Admin_Controller - 扩展 MY_Controller,用于“管理”页面

现在,当我在管理“索引”页面上时,其控制器使用 Admin_Controller,我收到来自 Front_Controller 的记录错误。

我将 var_dump() 放入 Front_Controller 中,但在管理页面上看不到它,所以我确信我的代码没有调用它,但不知何故,它似​​乎被调用了!

对此有什么解释吗?

一些代码:

Admin_Controller

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

class Admin_Controller extends MY_Controller
{
public function __construct() {
    parent::__construct();

    if(!$this->ion_auth->logged_in()) {
        redirect('login', 'location');
    } elseif($this->ion_auth->logged_in() AND !$this->ion_auth->in_group(array('admin', 'mod'))) {
        redirect('account/dashboard', 'location');
    } else {
        $this->user = $this->ion_auth->user()->row();
    }

    $this->data = array(
        'head' => 'inc/head',
        'foot' => 'inc/foot',
        'nav' => 'admin/inc/nav',
        'flash' => 'inc/flash_messages',
        'user' => $this->user
    );
}
}

管理索引:

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

class Index extends Admin_Controller {

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

public function index()
{
    $this->load->vars($this->data);
    $this->load->view('admin/index');
}

}

MY_控制器

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

    class MY_Controller extends CI_Controller
    {
        public function __construct() {
            parent::__construct();

            $this->data = array(
                'head' => 'inc/head',
                'foot' => 'inc/foot',
                'nav' => 'inc/nav',
                'flash' => 'inc/flash_messages',
            );

            $this->load->model('new/resellers/reseller_model');
            $this->load->model('new/white_labels/white_label_model');

            // find matching domain and show logo
            $domain = $_SERVER['SERVER_NAME'];
            $reseller = $this->reseller_model->get_by('domain', $domain);
            if($reseller):
                $resellerWhiteLabel = $this->white_label_model->get($reseller->white_label_id);
                if($resellerWhiteLabel):
                    $this->data['portal_reseller'] = $reseller;
                    $this->data['portal_reseller_white_label'] = $resellerWhiteLabel;
                endif;
            endif;

            $this->load->library('lib_log');
            $this->load->library('ion_auth');

            $this->load->helper('language');
            $this->lang->load('auth');
            $this->lang->load('site');
        }
    }

【问题讨论】:

  • 我们可以看看一些代码吗?
  • TBH 我不知道该给你看什么!
  • 你的 MY_Controller 是什么样子的?
  • 你从 Front_Controller 得到了什么样的错误?
  • 错误是关于未设置的变量。事情是,Front_Controller 没有被 be 调用,所以不应该出现错误(我知道,我还是要修复它们,但仍然......)

标签: php codeigniter


【解决方案1】:

据我所知,CodeIgniter 是 singleton,因此它会在每个请求上加载所有内容。
这意味着即使未调用 Front_Controller 也会被加载。因此,如果其中有错误,它们将被淘汰。

花点时间,修复错误,一切都会好起来的。

【讨论】:

  • 是的,无论如何我都计划修复错误,只是想知道为什么要调用控制器令人沮丧。感谢您的洞察力!
  • @MrPablo 好的,这就是为什么你应该只在需要时才加载库,以避免不必要的开销(即使 CI 的占用空间很小)。
猜你喜欢
  • 1970-01-01
  • 2017-07-20
  • 1970-01-01
  • 1970-01-01
  • 2016-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多