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 がこの投稿で同様のことをカバーしています。

たとえば、次は期待どおりに機能します。

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 が最も単純なようです。

注: アプリケーション パッケージのシナリオでこれを試したことはないので、すべてのアプリケーションの 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';

これの利点は、index.php を含む CI によって提供されるコア ファイルを変更する必要がないことです。唯一の欠点は、/shared アプリケーションの名前を変更または移動する必要がある場合、各 MY_Controller に移動して更新する必要があることです。新しいパスで。

于 2013-02-01T00:55:30.710 に答える