我正在使用CodeIgniter的Application Packages功能在多个应用程序中加载帮助程序,配置和库。见https://www.codeigniter.com/user_guide/libraries/loader.html
现在文档建议包中可以包含以下文件夹:
config/
helpers/
language/
libraries/
models/
我还有一个控制器,我希望在多个名为MY_Controller的应用程序中共享,所有应用程序基本控制器都将继承该控制器。但是,添加控制器文件夹似乎不起作用。如何在多个应用程序之间共享控制器?
答案 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。