我想为我正在开发的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需要访问主应用程序的模型。
任何建议或意见都将不胜感激。
非常感谢, 天使
答案 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
。