首页 文章

在多个应用程序上共享MY_Controller

提问于
浏览
2

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

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

config/ helpers/ language/ libraries/ models/

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

2 回答

  • 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]
    

    libraries/MY_Controller.php

    <?php
    
    class MY_Controller extends CI_Controller {
    
        function __construct() {
            parent::__construct();
    
            echo 'my_controller';
        }
    
    }
    

    controllers/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

    我设法很简单地解决了这个问题 . 仍然不如正确的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与新的道路 .

相关问题