Zend Framework后台服务/工作者

时间:2012-05-01 10:40:40

标签: zend-framework service background-process directory-structure

我想为我正在开发的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

请记住主应用程序的配置和worker几乎相同(特别是相同的db连接凭据,自动加载设置),并且worker需要访问主应用程序的模型。

任何建议或意见都将不胜感激。

非常感谢, 天使

2 个答案:

答案 0 :(得分:1)

MVC不仅在Web环境(Apache)中有用,你也可以将它用于“后台工作者”(视图是你的控制台),你只需要添加一个cli.php或其他东西,处理cli参数(模块,控制器,动作),创建请求对象并将其传递给调度程序。

那么你的触发后台工作程序是如何工作的(exec?),调用你新创建的cli.php并享受你的zf应用程序的功能(配置,自动加载......)。

简而言之,我无法告诉你cli.php究竟是什么样子,但我找到了这个教程: Using Zend Framework from the Command Line

重要对象:Zend_Controller_Request_Simple

答案 1 :(得分:1)

如果通过cronjob触发了worker,那么你可以使worker组件成为一个模块,因此它有自己的控制器,视图等。然后 - 如@MonkeyMonkey所说 - 你的命令行脚本可以向该模块发出MVC请求。

但在我看来,这个工作组件可能更自然地作为服务运行,这个类包含由cron触发的cli脚本调用的功能。基于ZF的cli脚本 - 可选地使用Zend_Console_Getopt,非常酷 - 可以使用相同的配置和Bootstrap类,有选择地引导资源(某些可能不需要基于cli的任务),并使用相同的自动加载器作为标准的MVC应用程序。

如您所知,这些工作人员将更新应用程序面向Web的部分可访问的状态表,以便这些页面可以根据请求读取/呈现状态。

对于文件系统结构,您可以将这些服务类命名为Application_Service_MyWorker,类似于存储在文件application/services/MyWorker.php中。甚至可能使用Application_Service_Worker_MyWorker中存储的application/services/Worker/MyWorker.php之类的内容进一步推进,尽管后者可能需要在资源自动加载器中添加另一个资源类型条目,类似于定义映射器和基于DbTable的模型的方式在Zend_Application_Module_Autoloader