幾個月前我開始使用CakePHP(1.2)爲公司的應用程序添加小功能,我對此不太熟悉。Cakephp cron作業調用控制器的動作
我們在合併到生產服務器之前先在開發服務器上進行本地測試。
我想要一個控制器動作,每小時調用一次我認爲是通過我的研究,一個cron工作來完成這個任務的最佳方式。
嘗試1
看完這些之後,
http://book.cakephp.org/1.2/en/view/110/Creating-Shells-Tasks
我可以實現沒有錯誤的東西,但不執行該操作。
基於這些例子中,我添加了一個名爲cron_dispatcher.php文件在我的應用程序目錄(而不是應用程序/ Web根目錄),然後從應用程序目錄
PHP cron_dispatcher.php /控制器/動作做這個命令/參數
仍然沒有發生,但它通過網址調用它時,完美。
嘗試2
我試圖創建一個殼(email.php),將調用/應用/銷售商/殼動作/。
<?php
class EmailShell extends Shell {
public function main() {
$this->out('Test');
}
}
?>
這成功地輸出測試使用
蛋糕電子郵件主要
控制檯但我找不到如何調用控制器的動作。我試過
$ this-> requestAction('/ controller/action');
我也嘗試使用與shell中的main函數不同的函數進行調用。
我曾嘗試以包括$控制器使用變量,我會一個模型,但沒有工作(和它沒有任何意義,我認爲)
我不認爲創建任務是解決方案,因爲我不想複製sendEmails函數,因此我正在尋找一種方法來從shell或其他任何地方調用控制器的操作!
有可能是一些理論我很想念,感謝
解決方案
我感動從控制器的一些方法,模型和我能夠從shell調用它們。
App::import('Component', 'Email');
class SendMemosShell extends Shell {
var $uses = array(
'Memo',
);
public function main() {
}
public function sendEmails() {
$this->Email =& new EmailComponent(null);
$memoList = $this->Memo->getMemos();
//...
}
}
此鏈接幫助 http://book.cakephp.org/2.0/en/console-and-shells/cron-jobs.html
編輯:澄清了一些信息和添加的解決方案
我還需要手動調用此操作(例如,通過單擊視圖中的按鈕)。你是否建議我創建一個任務而不是控制器動作,並調用它(自動使用cron作業並手動點擊)?是一個你稱之爲完全與邏輯分離的shell還是你在談論隊列?有時我需要一次發送多封電子郵件(當它自動檢查時),但不應該太頻繁發生,所以我想知道隊列是否有點太複雜,無法滿足我的需求!感謝您的回答 – Catherine
也回答了他們,一般來說,您應該考慮應用的大小和設計。我回答你的問題的方式是它應該完成的方式之一。這並不意味着這是對商業有利的方式。如果您只是發送郵件,則不值得爲它創建一個完整且更復雜的設置。 –
再次感謝您的詳細解答。我們同意不需要手動發送電子郵件,所以我創建了一個發送電子郵件的shell。這也迫使我將更多的方法從控制器轉移到模型上,如果我理解得好,模型更合適。然後我按照這個過程設置了cron作業:http://book.cakephp.org/2.0/en/console-and-shells/cron-jobs.html我決定不使用隊列,即使這看起來很有趣,因爲它在這種情況下不值得! – Catherine