Домены от REG.RU

CakePHP/Shell или как заставить shell использовать компоненты

Shell используется в cakePHP для запуска отложенных задач вашего приложения. Если вы в первый раз слышите про shell, то вам следует ознакомиться с неплохим мануалом и примерами на официальном сайте cakePHP и уже наконец приобщаться к использованию технологий облегчающих разработку.

Хочу поделиться с Вами решением проблемы использования в shell компонентов, определенных cakePHP, например таких как Email, Controller (ваш или с основы фреймворка) и другие. Надеюсь что этот пост поможет свести к минимуму ваши изыскания на зарубежных форумах хоть какой-то толики информации в такой ситуации... как искала я в свое время...

Итак, хотите сделать рассылку писем по расписанию на кроне или же исполнить функцию, определенную в контроллере через выполнение задач Shell? .. тогда прошу

Все началось с того, чтоб мне следовало сделать автоматическую рассылку писем в назначенное время. Простой Import не сработал для компонента Email для запуска по расписанию на кроне.

Долго проискав по просторам интернета на одном из зарубежных форумов нашла такой вариант решения:

class NpaprojectShell extends Shell{
// чтобы работала рассылка писем через компонент по рассписанию на кроне
var $tasks = array('Project', 'DbConfig', 'Model', 'Controller', 'View', 'Plugin');
function main(){
App::import('Component', 'Npamail.Sendmail');
$Sendmail = new SendmailComponent();
// ваш код и собственно отправка письма
}
}

Таким же образом можно без потери производительности для запуска на кроне импортировать любой элемент, компонент, контроллер и другие объекты. Далее остается только использовать нужные функции, определенные в полученном объекте по вашему усмотрению. Ничего сложного и все будет работать стабильно - не смотря, на то что это одноразовый запуск вручную, или запуск на кроне.

Надеюсь, что эта информация была вам полезна. Хорошего настроения и удачи! пишите код без сучка и задоринки ))

Поделиться @

Пока нет коментариев. Будьте первым!