2011-04-25 52 views
0

我爲我們的應用程序的需求創建了一個精心設計的日誌和錯誤報告系統,它使用app_controller中的函數進行接口。我可以從系統中的任何控制器調用此函數,因爲控制器擴展了app_controller。我希望能夠做的是從模型函數中調用這個函數。任何人都可以告訴我如何做到這一點,或者做一個替代方法嗎?從模型中訪問app_controller函數

+0

你不應該從模型訪問控制器。你能更詳細地描述這個功能具體做什麼嗎? – deceze 2011-04-25 02:31:30

+0

基本上我想要一個相當先進的日誌記錄功能,在開發/ qa服務器上執行非常詳細的日誌記錄,而在生產服務器上執行更少的日誌記錄功能。日誌條目被賦予嚴重程度評級(DEBUG,INFO,CRITICAL等)。我想要在應用程序代碼中的各個地方使用它。我更喜歡使用胖模型方法,但是app_controller中存在的這種記錄函數並不適合。 – Excalibur 2011-04-25 03:12:12

回答

3

幾個選項:

  1. 遷移邏輯模型層,使用自定義AppModel(APP/app_model.php)。假設所有控制器至少使用一個模型,則可以針對任何模型調用任何日誌記錄功能。即:$this->MyModel->customLog('test');
  2. 將邏輯移植到類中,將其存儲在app/libs中,並根據需要將其加載到控制器或模型中。

即:

App::import('Lib', 'CustomLog'); 
$this->CustomLog = new CustomLog(); 
$this->CustomLog->customLog('test'); 
+0

謝謝。我認爲使用庫功能可能是做到這一點的最佳方式。感謝您的解釋。 – Excalibur 2011-04-25 03:13:41

+0

這個澄清的另一個方面:我希望在某些情況下,我可以在此函數內產生對$ this-> Session-> setFlash()或$ this-> redirect()的調用。從app_controller中刪除函數可能不允許使用這些...可能嗎? – Excalibur 2011-04-25 03:21:10

+0

@Excalibur您不應該將日誌邏輯與用戶交互流邏輯混合。製作一個控制器功能,調用您的日誌代碼並在必要時重定向/閃爍。 – deceze 2011-04-25 03:33:33