Application/coreディレクトリに配置したMY_Controller.phpを作成して、CI_Controllerクラスを正常に拡張しました。
core/My_Controller.phpは次のようになります:
class MY_Controller extends CI_Controller {
function __construct()
{
parent::__construct();
}
}
その後、通常のコントローラを作成すると、次のようになります:
class Home extends MY_Controller {
function __construct()
{
parent::__construct();
}
function index()
{
$this->load->view('home');
}
}
私は管理バックエンドを作成していますが、My_Controllerの代わりに、コントローラーが拡張する別の基本クラスを作成したいと考えています。これは、管理コントローラーの一般的な方法(つまりauthentication_checkなど)を使用できるようにするためです。
解決できないのは、CI_Controllerを拡張する別のコントローラーを作成する方法です。
目的は、管理コントローラーがフロントエンドコントローラーとは異なる基本クラスを拡張することです。
管理ベースコントローラは次のようになります:
class MY_Admin_Controller extends CI_Controller {
function __construct()
{
parent::__construct();
}
}
管理ページの通常のコントローラー:
class Admin_home extends MY_Admin_Controller {
function __construct()
{
parent::__construct();
}
function index()
{
$this->load->view('admin_home');
}
}
問題は、CI_Controllerクラスを拡張するには、コントローラーファイルにPREFIX_Controller.phpという名前を付け、core /ディレクトリに配置する必要があることです。しかし、2つのコントローラークラスが必要で、それらに同じファイル名を付けることはできません。
両方を同じファイルに入れるだけで、これとまったく同じプロジェクトがあります。
MY_Controller.php
ファイルにadminと通常の拡張コントローラーの両方があるだけで問題なく動作します。
MY_Controller
またはその他の拡張ファイルの主な理由は、ベースファイル(ライブラリ、ヘルパーなど)をロードすると、CodeIgniterがそれらを自動的に開始するため、これらのファイルに多くのクラスを含めることができます。
編集:
それらをMY_Admin_Controller
またはMY_Controller
と呼ぶ必要さえありません。Admin_Controller
ファイルにはUser_Controller
とAjax_Controller
とMY_Controller
があります。
あなたがやっていることは正しいです。これらすべてのファイルが_application/core
_ディレクトリに必要です。これに関するPhil Sturgeonの投稿は次のとおりです。
http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY
http://philsturgeon.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY/
コツは、__autoload()
関数を使用することです-Philが彼の投稿で説明しています。
これはとても簡単です。以下をせよ:
your_ci_app/application/core/
と呼ばれるphpファイルを作成しますMY_Controller.php
(このファイルは、上位の親クラスが存在する場所になります)先ほど作成したファイルを開き、次のように複数のクラスを追加します。
class Admin_Parent extends CI_Controller {
public function __construct() {
parent::__construct();
}
public function test() {
var_dump("from Admin_Parent");
}
}
class User_Parent extends CI_Controller {
public function __construct() {
parent::__construct();
}
public function test(){
var_dump("from User_Parent");
}
}
このディレクトリの下に子コントローラーを作成しますyour_ci_app/application/controllers/
。 adminchild.php
開いた adminchild.php
とコントローラーコードを作成します。次のように、必ず親クラスの名前を拡張してください。
class Adminchild extends Admin_Parent {
function __construct() {
parent::__construct();
}
function test() {
parent::test();
}
}
cI_controllerの代わりに別のクラスを拡張する場合は、ターゲットクラスを含める必要があります。例えば
include 'auth.php';
class test extends Auth
フォルダー内のすべてのファイル アプリケーション/コア
class MY_Controller extends CI_Controller
{
public function __construct()
{
parent::__construct();
echo "This is " . __CLASS__ . "<br />";
}
}
公衆
class Public_Controller extends My_Controller
{
public function __construct()
{
parent::__construct();
echo "This is " . __CLASS__ . "<br />";
}
}
ダッシュボードには、管理者とユーザーの2つのサブクラスがあります。
class Dashboard_Controller extends My_Controller
{
public function __construct()
{
parent::__construct();
echo "This is " . __CLASS__ . "<br />";
}
}
管理者
class Admin_Controller extends Dashboard_Controller
{
public function __construct()
{
parent::__construct();
echo "This is " . __CLASS__ . "<br />";
}
}
ユーザー
class User_Controller extends Dashboard_Controller
{
public function __construct()
{
parent::__construct();
echo "This is " . __CLASS__ . "<br />";
}
}
に config/config.php
/* load class in core folder */
function my_load($class) {
if (strpos($class, 'CI_') !== 0) {
if (is_readable(APPPATH . 'core' . DIRECTORY_SEPARATOR . $class . '.php' )) {
require_once (APPPATH . 'core' . DIRECTORY_SEPARATOR . $class . '.php');
}
}
}
spl_autoload_register('my_load');
に controller/Home.php
//class Home extends MY_Controller {
//class Home extends Dashboard_Controller {
class Home extends Admin_Controller {
public function index()
{
echo "This is " . __CLASS__ . "<br />";
//$this->load->view('home');
}
}