Задание Cakephp cron для вызова действия контроллера

Я начал использовать CakePHP (1.2 )несколько месяцев назад, чтобы добавить небольшие функции в приложение компании, и я не слишком знаком с ним.

Мы тестируем локально, затем на сервере разработки перед слиянием с производственным сервером.

Я хочу, чтобы действие контроллера вызывалось каждый час, и я предположил, что это лучший способ сделать это благодаря моим исследованиям, работе cron.


Попытка 1

Прочитав их,

http://bakery.cakephp.org/articles/mathew_attlee/2006/12/05/calling-controller-actions-from-cron-and-the-command-line

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 :уточнил часть информации и добавил решение

6
задан Catherine 15 April 2013 в 22:15
поделиться