カスタム ベース コントローラーを作成し、そこに他のコントローラーを拡張する場合は、次の方法で実行できます。
MY_Controller
フォルダーに拡張CI_Controller
を作成し、コアから自動ロードされるapplication/core/
ように他のコントローラーを拡張MY_Controller
します(これはすでに知っていると思いますが、他の代替手段が必要です。MY_Controller
で作成MY_Controller
しapplication/core/
ます。Admin_Controller
次に、主にとである別のレベルのコントローラーを作成しますFrontend_Controller
。これで、これらのコントローラーの 1 つが、実際に使用するコントローラーのベースになります。
例えばapplication/core/MY_Controller.php
class MY_Controller extends CI_Controller {
public function __construct(){
parent::__construct();
}
}
次に、管理者およびフロントエンドコントローラーが作成され、次のようapplication/libraries/
に拡張されますMY_Controller
class Admin_Controller extends MY_Controller {
public function __construct(){
parent::__construct();
}
}
現在、任意のコントローラーでこれら 2 つのコントローラーのいずれかを拡張できますが、そのためにはそれらを自動ロードする必要があります。この場合のオートロードでは、config/autoload.php で autoload['libraries'] を設定しても機能しないため、混乱が生じる可能性があります。そのオートロードはコントローラー内で機能しますが、ここではその前に、つまりクラス宣言でオートロードする必要があります。このコードを設定する必要がありますconfig/config.php
function __autoload($class)
{
$path = array('libraries');
if(strpos($class, 'CI_') !== 0) {
foreach($path as $dir) {
$file = APPPATH.$dir.'/'.strtolower($class).'.php';
if (file_exists($file) && is_file($file))
@include_once($file);
}
}
}
これで、独自のコントローラーを作成できます
class newController extends Admin_Controller
{
}
これは、構造を非常にクリーンで効果的なものにする最も推奨される方法です。初めて理解するのに多少の努力が必要かもしれませんが、間違いなく価値があります。
- 3番目の方法は、2番目の方法を微調整したものであり、使用しないという条件に基づいています直接
MY_Controller
作成Admin_Controller
またはFrontend_Controller
拡張できますが、拡張することはできません
。その場合、これらのコントローラーの両方でコードの重複が発生する可能性がありますCI_Controller
MY_Controller