2017-07-07 135 views
3

我正在使用codeigniter(3.1.5),並且在應用程序/控制器/文件夾中有兩個控制器。與名稱控制器A和控制器B.我想在控制器B中擴展控制器A,以便我可以使用控制器A的方法,但它會生成類未找到錯誤。在Codeigniter中,將一個控制器擴展到另一個控制器中

這是我的示例代碼:

A_Controller.php:

defined('BASEPATH') OR exit('No direct script access allowed'); 
class A_Controller extends CI_Controller { 
    public function index() 
    { 
    } 

    public function display(){ 
    echo 'base controller function called.'; 
    } 
} 

B_Controller.php:

defined('BASEPATH') OR exit('No direct script access allowed'); 
class B_Controller extends A_Controller { 

} 

我想執行顯示()在控制器B控制器A的方法 如果我把控制器A放在應用程序/核心/文件夾中並在application/config/config.php文件中製作

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

那麼我可以能夠訪問控制器A.方法

請建議。 在此先感謝。

+0

[擴展控制器類CI中(的可能的複製https://stackoverflow.com/questions/8342232/extending-the-controller-class-in -codeigniter) –

+0

CI對我來說太難看了,但是大多數框架都是...... – ArtisticPhoenix

回答

1

請嘗試使用以下代碼。

defined('BASEPATH') OR exit('No direct script access allowed'); 
    class B_Controller extends A_Controller { 
     public function test() 
     { 
      $this->display(); 
     } 
    } 
+0

感謝您的回覆......但問題是不同的,它給出'Class not found'錯誤來擴展A_Controller。 – Abhishek

3

在另一個控制器中擴展控制器並不是很好。使用MVC構建特別是使用CI,您可以選擇其他選項來實現此目的。

  1. 使用類MY_Controllerapplication/core擴展了CI_Controller。之後,所有(或某些)控制器應擴展MY_Controller。在MY_Controller中,你可以有很多功能,你可以在你的控制器中調用你想要的功能。
  2. 使用庫。在application/libraries中編寫您自己的庫並將其加載到您的控制器中。圖書館是一個爲你的項目提供功能的類。
  3. 使用幫手。在application/helpers中寫下你自己的幫手,並將其加載到你的控制器中。助手應該具有適用於您的應用程序的通用目的。

    通過這種方式,您的代碼將會更加靈活和可重用。用2個控制器搞亂對我來說似乎不好。請記住,使用CI的默認路由系統可能會讓您感到困惑。

+0

是的,你告訴我標準的方式,但在我的情況下,我想繼承基類的成長爲兒童類只爲多站點pupose。謝謝。 – Abhishek

0

使用在控制器構造

defined('BASEPATH') OR exit('No direct script access allowed'); 
class B_Controller extends A_Controller { 

    public function __construct() { 
     parent::__construct(); 
    } 
    public function test() 
    { 
     $this->display(); 
    } 
} 
相關問題