Я начал использовать CakePHP (1.2 )несколько месяцев назад, чтобы добавить небольшие функции в приложение компании, и я не слишком знаком с ним.
Мы тестируем локально, затем на сервере разработки перед слиянием с производственным сервером.
Я хочу, чтобы действие контроллера вызывалось каждый час, и я предположил, что это лучший способ сделать это благодаря моим исследованиям, работе cron.
Попытка 1
Прочитав их,
http://book.cakephp.org/1.2/en/view/110/Creating-Shells-Tasks
Я мог бы реализовать что-то без ошибок, но действие не выполняется.
Основываясь на этих примерах, я добавил файл с именем cron _dispatcher.php в каталог моего приложения (, а не app/webroot ), а затем выполнил эту команду из каталога приложения
php cron_dispatcher.php /controller/action/param
По-прежнему ничего не произошло, но он отлично работает, когда я вызываю его через URL-адрес.
Попытка 2
Я попытался создать оболочку (email.php ), которая вызывала бы действие в /app/vendors/shells/.
out('Test');
}
}
?>
Это успешно выводит тест в консоли, используя
cake email main
но тогда я не могу найти, как вызвать действие контроллера. Я пробовал
$this->requestAction('/controller/action');
Я также пытался сделать вызов из функции, отличной от основной в оболочке.
Я попытался включить контроллер в переменную $uses, как если бы я использовал модель, но это не сработало (и я думаю, что это не имеет смысла)
Я не думаю, что создание задачи является решением, поскольку я не хочу дублировать функцию sendEmails, поэтому я ищу способ просто вызвать действие контроллера из оболочки или что-то еще!
Вероятно, я упустил какую-то теорию, спасибо
Решение
Я перенес некоторые методы из контроллера в модель и смог вызывать их из оболочки.
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
edit :уточнил часть информации и добавил решение