在多个应用程序上共享MY_Controller

时间:2013-01-31 03:02:35

标签: codeigniter

我正在使用CodeIgniter的Application Packages功能在多个应用程序中加载帮助程序,配置和库。见https://www.codeigniter.com/user_guide/libraries/loader.html

现在文档建议包中可以包含以下文件夹:

config/ helpers/ language/ libraries/ models/

我还有一个控制器,我希望在多个名为MY_Controller的应用程序中共享,所有应用程序基本控制器都将继承该控制器。但是,添加控制器文件夹似乎不起作用。如何在多个应用程序之间共享控制器?

2 个答案:

答案 0 :(得分:1)

您可以使用自己的__autoload()函数Phil Sturgeon covers a similar thing in this post来解决这个问题。

例如,以下工作符合预期:

<强>的index.php

<?php

/**
 * Look for any non-CI class in the libraries folder
 * @param type $class
 */

function __autoload($class)
{
 if(strpos($class, 'CI_') !== 0)
 {
  @include_once( APPPATH . 'libraries/'. $class . EXT );
 }
}

[Rest of index.php as normal]

<强>库/ MY_Controller.php

<?php

class MY_Controller extends CI_Controller {

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

        echo 'my_controller';
    }

}

<强>控制器/ nickbarrett.php

<?php

class nickbarrett extends MY_Controller {

    function __construct() {

        parent::__construct();

        echo 'extending my_controller';

    }

    public function index() {

        echo 'index';

    }

}

这意味着您不必在系统文件夹中放置任何内容。可能还有一些地方可以放置__autoload()函数,但index.php似乎是最简单的。

注意:我没有在Application Packages场景中尝试这个,所以我很感激如果编辑每个应用程序的index.php可能对你不可行。

答案 1 :(得分:1)

我设法很简单地解决了这个问题。 仍然不如正确的CI功能那么理想,但基本上我在每个应用程序的/ core文件夹中创建了文件MY_Controller.php,其中包含以下内容:

<?php
/**
 * Load the global shared MY_Controller
 */
require_once '/../../shared/core/MY_Controller.php';

这样做的好处是我不需要修改CI提供的任何核心文件,包括index.php 唯一的缺点是,如果我必须(永远)重命名或移动/共享应用程序,我将不得不用新路径更新每个MY_Controller。