2012-07-29 28 views
2

所有我想要做的東西很簡單:擴展是CI_Controller

  • 創建一個類(比方說brandNewClass - 不MY_Controller)延伸是CI_Controller
  • 創建延伸brandNewClass
其他控制器

例如

class brandNewClass extends CI_Controller { 

    public function index() 
    { 

    } 

    public function info() 
    { 

    } 
} 

一樣使用(在文件中/controllers下):

<?php 

class newController extends brandNewClass 
{ 
} 

?> 

的事情是,雖然它的工作原理,當我複製/application/core下的文件,並將其命名爲MY_Controller,當我改變這個名字更多......不言而喻,事實並非如此。

Fatal error:Class 'brandNewClass' not found in .... on line ..

我使用__autoload功能提到here甚至嘗試過,但沒有任何的運氣。

任何想法?

回答

1
  1. 您應該聲明該類爲抽象類,因爲它不應該直接實例化。
  2. 您需要修改CodeIgniter自動加載器configuration file並添加您的班級,或更改actual autoloader
  3. 你真的應該考慮不使用CodeIgniter的:)
+0

您能否展開第3點? – Chris 2013-02-10 04:08:23

6

磁帶自動加載機不包括全自動其他控制器。你將不得不包括它手動像這樣:

if (!defined('BASEPATH'))exit('No direct script access allowed'); 

    include_once(APPPATH . 'controllers/brandnewclass.php'); 
2

如果你想創建一個自定義的基本控制器並進行其他控制人不存在擴展,您可以在以下幾個方面做:

  1. 創建應用程序/核心/文件夾擴展是CI_Controller MY_Controller,讓其他控制器擴展MY_Controller作爲MY_Controller將從核心自動載入(這個我想你已經知道,但希望其他的替代品。

  2. 在application/core /中創建MY_Controller。然後創建其他級別的控制器,主要可以通過Admin_Controller和Frontend_Controller。現在,其中一個控制器將爲您實際使用的控制器打下基礎。爲此,MY_Controller(在application/core /中將擴展CI_Controller。

    class MY_Controller extends CI_Controller {public function __construct(){ parent :: __ construct(); } }

然後管理員和前端控制器將在應用程序/庫中創建/和將延伸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 
{ 
} 

這是最建議的方法使你的結構很乾淨,有效。第一次理解可能需要一些努力,但絕對值得。

  1. 第三種方法僅僅是第二個的好辦法,只是根據你所提到的不使用MY_Controller 您可以Admin_Controller或Frontend_Controller直接延伸是CI_Controller並沒有擴大的情況MY_Controller ,可能只是導致一些口是心非的代碼在這兩個控制器中,如果這可能是這種情況