2

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

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

config/ helpers/ language/ libraries/ models/

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

4

2 回答 2

1

您可能可以使用自己的__autoload()函数来解决这个问题,Phil Sturgeon 在这篇文章中介绍了类似的内容

例如,以下按预期工作:

索引.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 似乎是最简单的。

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

于 2013-01-31T16:39:56.537 回答
1

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

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

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

于 2013-02-01T00:55:30.710 回答