2009-11-23 68 views
2

我正在構建一系列表單,並且試圖將父窗體類的功能繼承到所有表單中。例如,CodeIgniter中的繼承

LeaveForm extends Form(型號)

LeaveFormController extends FormController

我處理所有的請假單具體的東西在LeaveFormControllerLeaveForm

LeaveFormController構造函數中,我只是調用父類的構造函數,然後加載LeaveForm模型。而在FormController的構造函數中,我加載了Form模型。

我的問題是,我得到一個錯誤,

不能重新聲明類形式form.php的

我有我的架構錯了嗎?我該如何處理?

+0

也許[此](http://codeigniter.com/forums/viewthread/52848/)或[此](http://codeigniter.com/forums/viewthread/ 56690 /)?另外我會建議在Codeigniter的論壇上創建一個新的主題 – vladikoff 2009-11-23 04:03:27

回答

0

檢查該類是否已被初始化像這樣:

if (!class_exists('classname')) 
{ 
    // ok fine create new instance now 
} 
0

也許當你$this->load->model('Form'),手動include d的models/form.php文件?

在您的leaveform.php模型文件中,確保使用codeigniter的模型加載機制而不是requireinclude加載了擴展的超類模型。 Codeigniter有一個加載器,用於跟蹤已加載的文件以避免重新聲明類,但您需要使用$this->load來使用它。它不會知道直接使用includerequire加載的文件。

所以在leaveform.php頂部,使用此:

$CI =& get_instance(); $CI->load->model('Form'); 

這是不相關,但你將有痛苦,除非您的命名空間笨模型類,你命名空間Controller類相同的方式。

嘗試使用FormModel extends CI_Model {};代替Form extends CI_Model {};