2013-01-15 154 views
0

我正在afterSave中處理消息模型。每次創建消息時,我都希望發送一封電子郵件通知收件人他們的新消息。我在發送郵件的郵件控制器中有一個動作,我想從afterSave中調用它。cakephp你如何在模型中調用控制器的動作

我已經打過電話這樣的:

function afterSave($created){ 
    if($created){ 
     $this->msgToEmail($this->data); 
    } 
} 

我得到一個SQL錯誤,因爲它看起來該函數的模型,而不是在控制器內。

如何聲明模型函數?可能嗎?

+0

我使用的是版本1.3 – okwme

+1

你不用!你在其他模型中使用模型方法,永遠不會有控制器!所以讓你的代碼成爲模型方法。那麼你可以很容易地使用它。 – mark

回答

4

您使用其它型號的內部模型方法,永遠一個控制器!

因此,讓你的代碼成爲模型方法。那麼你可以很容易地使用它。

1.3您現在可以在模型方法中對組件進行破解。直到你可以最終升級到2.x.

App::import('Component', 'Email'); 
$this->Controller = new Controller(); 
$this->Email = new EmailComponent(null); 
$this->Email->initialize($this->Controller); 
// from/to/subject/... 
$this->Controller->set('text', $this->data['Model']['content']); 
return $this->Email->send(); 
+0

這真是太好了,謝謝! – okwme

+0

但我如何處理從模型渲染視圖?當我使用$ this-> set()時,我的變量不會進入模板文件。 – okwme

+0

我剛剛加了個例子 – mark

1

要聲明模型方法,只需將其放入模型中(而不是控制器)。

模型中的文件:

public function msgToEmail($data) { 
    // code to send your email... 
} 

而且,不要忘了在你的模型文件的頂部導入CakeEmail

App::uses('CakeEmail', 'Network/Email'); 
+0

正確!自己發送模型中的電子郵件。同時刪除從您的控制器發送電子郵件代碼這是一個反模式到MVC。我喜歡創建一個特定於發送電子郵件的模型,我只是在我需要的模型中「導入」模型。 –

+0

我使用的是版本1.3,其中電子郵件只是一個組件。應用程序:使用不適用於聲明組件。如果我製作電子郵件模型,我是否仍需要以某種方式訪問​​該組件? – okwme

相關問題