Фоновая служба Zend Framework / рабочий

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

Работник будет вызван контроллером для выполнения некоторых задач, а затем контроллер проверит состояние работника, чтобы этот бит был покрыт.

С точки зрения структуры папок, где должен находиться код для рабочего?

application/
  models/
  services/
    worker/
      application/ --> code for the worker (standard ZF structure)
      worker.php   --> entry-point to the worker

Или же

application/
  controllers/
    WorkerController.php
  models/
    Worker/
      Class.php
      Class2.php
  services/
    worker.php --> entry-point to the worker

Имейте в виду, что конфигурация основного приложения и работника практически идентичны (особенно те же учетные данные подключения к БД, параметры автозагрузки), и работнику потребуется доступ к моделям основного приложения.

Любые советы или мнения будут оценены.

Большое спасибо, Ангел

2 ответа

Решение

Если рабочий запускается с помощью cronjob, то вы можете сделать рабочий компонент модулем, чтобы он имел свои собственные контроллеры, представления и т. Д. Затем, как отмечает @MonkeyMonkey, ваш сценарий командной строки может выполнять запросы MVC к этому модулю.

Но мне кажется, что этот рабочий компонент мог бы более естественно функционировать как сервис, класс, содержащий функциональность, которая вызывается вашим скриптом cli, запускаемым cron. Cli скрипты на основе ZF- при желании Zend_Console_Getopt, что довольно круто - можно использовать тот же конфиг и класс Bootstrap, выборочно загружать ресурсы (некоторые могут не потребоваться для задачи на основе cli) и использовать те же автозагрузчики, что и стандартное приложение MVC.

Как вы заметили, эти работники обновят таблицу состояния, которая будет доступна для веб-части приложения, чтобы эти страницы могли читать / отображать статус по запросу.

Что касается структуры файловой системы этого, вы можете назвать эти классы обслуживания как Application_Service_MyWorker хранится в файле application/services/MyWorker.php, Возможно, даже нажать вниз, используя что-то вроде Application_Service_Worker_MyWorker Хранится в application/services/Worker/MyWorker.phpхотя для этого может потребоваться добавление еще одной записи типа ресурса в автозагрузчик ресурсов, аналогично тому, как определяются сопоставители и модели на основе DbTable в Zend_Application_Module_Autoloader,

MVC не только полезен в веб-средах (Apache), вы также можете использовать его для "фоновых рабочих" (представление - это ваша консоль), вам просто нужно добавить cli.php или что-то еще, обрабатывать аргументы cli (модуль, контроллер, action), создайте объект запроса и передайте его диспетчеру.

Итак, как бы вы ни работали в фоновом режиме (exec?), Вызывайте только что созданный файл cli.php и наслаждайтесь функциями приложения zf (настройка, автозагрузка и т. Д.).

Короче говоря, я не могу сказать вам, как именно будет выглядеть cli.php, но я нашел этот урок: Использование Zend Framework из командной строки

Важный объект для вас: Zend_Controller_Request_Simple

Другие вопросы по тегам