几个月前我开始使用 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
编辑:澄清了一些信息并添加了解决方案