Zend framework Zend Framework后台服务/工作者

Zend framework Zend Framework后台服务/工作者,zend-framework,service,background-process,directory-structure,Zend Framework,Service,Background Process,Directory Structure,我想为正在开发的ZF应用程序创建一个后台工作程序,但我对软件体系结构感到困惑,而对文件系统体系结构感到困惑 控制器将触发工人执行某些任务,然后控制器将检查工人的状态,因此此位已被覆盖 从文件夹结构的角度来看,工作人员的代码应该放在哪里 application/ models/ services/ worker/ application/ --> code for the worker (standard ZF structure) worker.ph

我想为正在开发的ZF应用程序创建一个后台工作程序,但我对软件体系结构感到困惑,而对文件系统体系结构感到困惑

控制器将触发工人执行某些任务,然后控制器将检查工人的状态,因此此位已被覆盖

从文件夹结构的角度来看,工作人员的代码应该放在哪里

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

请记住,主应用程序和辅助程序的配置几乎相同(尤其是相同的db连接凭据、自动加载设置),辅助程序需要访问主应用程序的模型

如有任何建议或意见,将不胜感激

非常感谢,,
Angel

MVC不仅在web环境(Apache)中很有用,您还可以将其用于“后台工作人员”(视图是您的控制台),您只需添加cli.php或其他内容,处理cli参数(模块、控制器、操作),创建请求对象并将其传递给dispatcher

因此,无论您如何触发后台工作程序(exec?),请调用您新创建的cli.php并享受zf应用程序的功能(配置、自动加载等)

简而言之,我无法告诉您cli.php的确切外观,但我发现了本教程:


对您来说很重要的对象:Zend_Controller_Request_Simple

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

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

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


至于它的文件系统结构,您可以将这些服务类命名为
Application\u service\u MyWorker
,存储在文件
Application/services/MyWorker.php
中。甚至可以使用存储在
Application/services/Worker/MyWorker.php
中的
Application\u Service\u Worker\u MyWorker
进一步向下推送,尽管后者可能需要在资源自动加载程序中添加另一个资源类型条目,与
Zend_Application_Module_Autoloader

中定义映射器和基于DbTable的模型的方式类似,我是否正确理解worker组件具有完整的ZF应用程序结构(控制器等),并且主应用程序将向该组件发出MVC请求?并且客户端对主应用程序的请求将等待worker完成,然后再将响应返回给等待的客户端?好吧,worker可以拥有完整的ZF应用程序结构(示例1),这就是我试图建立的-如果它确实应该拥有ZF应用程序结构。主应用程序不会直接向该组件发出MVC请求,但它将能够通过数据库中“状态”表获得的信息显示工作人员的状态。将通过cronjob触发worker,该作业将检查是否有任何作业正在运行或启动新作业。我希望这有帮助,如果是,我将更新原始问题。谢谢你的输入。所以我问题中的第二种方法更接近你的建议。我假设,一般来说,我们希望避免在“应用程序”中添加“应用程序”。我现在唯一需要做的就是说服软件架构师他的方法(app-in-app)相当激进,我们应该接受我的建议。
application/
  controllers/
    WorkerController.php
  models/
    Worker/
      Class.php
      Class2.php
  services/
    worker.php --> entry-point to the worker