几个月前我开始使用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