2009-10-26 73 views
10

在我的CI系統\庫目錄中,我有一個名爲DD_Controller.php的新類。這個文件看起來是這樣的:如何擴展代碼點火器控制器類?

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

class DD_Controller extends Controller 
{ 
    protected $ddauthentication; 


    function __construct() 
    {   
     parent::Controller(); 
     $this->ddauthentication = "Authenticated"; 
    } 
} 
?> 

我的應用程序控制器的定義是這樣的:

class Inquiry extends DD_Controller 
{...} 

的查詢類的工作正常,當我向控制器,但我得到一個

Fatal error: Class 'DD_Controller' not found in C:\development\localhost\applications\inquiry\controllers\inquiry.php on line 4

當我擴展DD_Controller。在配置文件我已經前綴定義爲這樣:

$config['subclass_prefix'] = 'DD_'; 

我失去了我的任何想法?

TIA

回答

4

DD_Controller.php應該在/系統/應用/庫/

如果您正在使用多個應用程序相同的CI,並希望他們都能夠延長它們的控制器到你自定義的那個,那麼你可以在同一個文件中擴展基礎控制器類。

在系統/庫/ Controller.php這樣下面的Controller類:

class Mega_Controller extends Controller { 
    function Mega_Controller() 
    { 
     parent::Controller(); 
     // anything you want to do in every controller, ye shall perform here. 
    } 
} 

然後你就可以做到這一點在你的應用程序控制器:

class Home extends Mega_Controller { 
    .... 

由於擴展控制器類你創建的將會可用。我認爲這比覆蓋基本控制器更好,但那也可以。

+0

這不*工作* - 謝謝你。但這不是我們正在尋找的。如果我們處於單一應用程序環境 - 您的解決方案將是完美的。 但是,我們希望所有的應用程序可以共享相同的主基地控制器。替換system/Controller.php的缺失 - 可以這樣做嗎? – ChronoFish

+0

LOL - 這正是我想出以及解決方案。這似乎是最低的影響 - 控制器上沒有代碼更改,對文件的更改有限,並且它在所有應用程序中都可用。 感謝您的幫助! – ChronoFish

4

我建議避免「破解」CodeIgniter核心文件。 更好地利用其本地擴展的可能性,並嘗試適應它們。

我會推薦任何PHP庫/ CMS的相同規則。 這條規則有幾個原因: - quiclky升級時沒有考慮成千上萬個筆記在core文件中破解的地方和方式的能力; - 便攜性; - 分享您的代碼的可能性 - 例如,如果您有需要,您和您的朋友都可以使用它,並且這將幫助他們保持其庫更新,與您一樣。

換句話說,這是更專業,它在未來通過可用性,可移植性和更新應用程序的可能性付出。

關於你個人的問題...

對我來說,沒有什麼不好創建自己的不同,需要延長本機的CodeIgniter控制器一切庫,然後加載在控制器的構造函數這個庫和你做。提高可用性的唯一方法是給你的圖書館一個簡短的名字。

這樣,你甚至可以將你在不同的片段需要什麼,並投入單獨的庫: WebFeatures AdminFeatures 等。

然後你只需加載你的控制器的構造函數需要的庫,和你做。

P.S.我知道,提出的方式不適合「右」 OOP的概念,但在同一時間,你千萬不要忘記使用的庫的完整性。上述

一切都只是多了一個在專業的web開發煤礦7年的經驗來看,所以我希望這將是,如果不跟隨有幫助的話,至少要考慮到。

問候, 安東

5

這是一個更好的辦法。執行以下操作:

  1. 轉到以下目錄:your_ci_app/application/core/並創建一個名爲MY_Controller.php一個PHP文件(該文件將在您的頂級父類將駐留)
  2. 打開這個剛創建的文件,並添加您的多個類,就像這樣:

    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"); 
        } 
    
    } 
    
  3. 這個目錄your_ci_app/application/controllers/下創建你的孩子控制器。我將其稱之爲adminchild.php

  4. 打開adminchild.php並創建您的控制器代碼,確保延長父類的名稱,例如:

    class Adminchild extends Admin_Parent { 
    
        function __construct() { 
         parent::__construct(); 
        } 
    
        function test() { 
         parent::test(); 
        } 
    
    }