【发布时间】:2012-06-29 17:34:39
【问题描述】:
几个月前我开始使用 CakePHP (1.2) 为公司的应用程序添加一些小功能,我对它不太熟悉。
在合并到生产服务器之前,我们先在开发服务器上进行本地测试。
我希望每小时调用一次控制器操作,通过我的研究,我认为这是执行此操作的最佳方法,即一项 cron 作业。
尝试 1
看完这些,
http://book.cakephp.org/1.2/en/view/110/Creating-Shells-Tasks
我可以实现一些没有错误的东西,但是该操作没有执行。
基于这些示例,我在我的应用程序目录(不是 app/webroot)中添加了一个名为 cron_dispatcher.php 的文件,然后从应用程序目录执行此命令
php cron_dispatcher.php /controller/action/param
仍然没有发生任何事情,但是当我通过 url 调用它时它工作得很好。
尝试 2
我尝试创建一个 shell (email.php) 来调用 /app/vendors/shells/ 中的操作。
<?php
class EmailShell extends Shell {
public function main() {
$this->out('Test');
}
}
?>
这在控制台中成功输出了测试
蛋糕电子邮件主要
但是我找不到如何调用控制器的操作。我试过了
$this->requestAction('/controller/action');
我还尝试从与 shell 中的 main 不同的函数进行调用。
我尝试将控制器包含在 $uses 变量中,就像使用模型一样,但这没有用(我认为这没有意义)
我不认为创建任务是解决方案,因为我不想复制 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
编辑:澄清一些信息并添加解决方案
【问题讨论】:
标签: php shell cakephp controller cron