目前我的Cakephp應用程序中沒有任何排隊功能。我將在不久的將來需要這一點。上傳將導致使用外部API的批處理作業具有使用限制,因此如果它受到單獨的隊列威脅的威脅,那麼這將是最好的。 我對此沒有任何經驗,所以我會嘗試一個不同的,但更容易的例子。蛋糕事件是異步處理的嗎?
用戶操作導致發送電子郵件。目前,頁面的加載延遲了服務器發送電子郵件所花費的時間(相當長)。我想用Event系統來解決這個問題。 (我知道我也可以做到這一點使用這個功能AfterRender階段,或將其派遣到shellTask,但這種方式我不學習任何東西)
從示例頁面:http://book.cakephp.org/2.0/en/core-libraries/events.html 我發現這個例子:
// Cart/Model/Order.php
App::uses('CakeEvent', 'Event');
class Order extends AppModel {
public function place($order) {
if ($this->save($order)) {
$this->Cart->remove($order);
$this->getEventManager()->dispatch(new CakeEvent('Model.Order.afterPlace', $this, array(
'order' => $order
)));
return true;
}
return false;
}
}
假設的功能是由一個控制器動作叫:
public function place_order() {
$result = $this->Order->place($this->request->data);
$this->set('result', $result);
}
現在我的問題...將相應的視圖中的所有調度的事件後呈現完成?或者模型功能是否會觸發事件並忘記它? 最後的選擇似乎更符合邏輯的我(這也類似於提到的jQuery功能的文章)
的問題是,如果這是真的,我不知道以後的例子:
在這個例子中有關使用結果:
// Using the event result
public function place($order) {
$event = new CakeEvent('Model.Order.beforePlace', $this, array('order' => $order));
$this->getEventManager()->dispatch($event);
if (!empty($event->result['order'])) {
$order = $event->result['order'];
}
if ($this->Order->save($order)) {
// ...
}
// ...
}
如果只是觸發事件(然後忘了),有沒有辦法可以asume它已經修改了通過事件對象的下一行代碼!
我想盡可能地使用蛋糕,但我不確定是否可以在沒有shellTasks和外部隊列的情況下獲得所需的背景行爲。關於這些蛋糕活動的任何提示?
THX。你說「如果你想要」......但這正是我不想要的。我可以同時使用它們嗎?我怎麼做? – Jeroen 2013-03-05 12:16:33
對不起,我的意思是字面意思。你不能異步使用它們。您可以創建自定義事件系統,也可以將它們發送到shell。 – Calin 2013-03-05 12:32:48
Thx。我將用這個排隊系統來解決它:CakePHP的https://github.com/dereuromark/cakephp_queue – Jeroen 2013-03-06 14:18:24