0

我想創造我工作的一個ZF的應用程序後臺工作,但我感到困惑,還不如多軟件的架構,但更多的文件系統架構。Zend框架後臺服務/工人

工人將通過控制器觸發以執行一些任務,然後因此該位已經覆蓋控制器會檢查了對工人的地位。

從視圖中的文件夾結構地步,應該爲這些工人的代碼坐在?

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 

請記住主要的應用程序和工作人員的配置幾乎是相同的(尤其是相同的數據庫連接憑證,自動加載設置),工人將需要訪問主應用程序楷模。

任何意見或建議,將不勝感激。

非常感謝, 天使

+0

我是否正確理解工作組件具有完整的ZF應用程序結構(控制器等),並且主應用程序將向該組件發出MVC請求?而且,向主應用程序發送的客戶端請求將在等待客戶端返回響應之前等待工作人員完成。 –

+0

那麼,工人*可以擁有完整的ZF應用程序結構(example1),這就是我正在嘗試建立的 - 如果它確實應該具有ZF應用程序結構。主應用程序將*不*直接向該組件發出MVC請求,但它可以通過數據庫中的「狀態」表獲得的信息顯示工作人員的狀態。工作人員將通過cronjob觸發,以檢查是否有任何工作正在運行或啓動新工作。我希望這有助於,如果是的話,我會更新原來的問題。 – AngelP

回答

1

如果工人被觸發通過cronjob,那你可能使工作組件成爲一個模塊,所以它有自己的控制器,視圖等。然後 - 正如@MonkeyMonkey注意到 - 你的命令行腳本可以使MVC請求到該模塊。

但在我看來,這名工人組件可以作爲一種服務,即得到由你的cron觸發CLI腳本調用含有類功能更自然地發揮作用。基於ZF的cli腳本 - 可選地使用Zend_Console_Getopt,這非常酷 - 可以使用相同的配置和Bootstrap類,有選擇地引導資源(某些可能不需要基於cli的任務),並使用與標準MVC相同的自動加載器應用程序。

正如你注意到,這些工人將更新,這將是對應用程序的面向網絡的部分訪問的狀態表,使這些頁面可以讀/渲染上請求的狀態。

至於文件系統的結構,你可以命名這些服務類的東西,如存儲在application/services/MyWorker.php文件中的Application_Service_MyWorker。甚至可能進一步推低使用類似Application_Service_Worker_MyWorker存儲在application/services/Worker/MyWorker.php,儘管後者可能需要增加另一個資源型進入資源自動加載器,類似於映射器和基於DBTABLE的模型中Zend_Application_Module_Autoloader的定義方式。

+0

感謝您的輸入。所以我的問題中的第二種方法更接近你的建議。我假設通常我們要避免在「應用程序」中添加「應用程序」。我現在唯一需要做的就是說服軟件架構師,他的方法(app-in-app)是相當激進的,我們應該遵循我的建議。 – AngelP

+0

謝謝。還有祝你好運。 ;-) –

1

MVC不僅是在網絡環境(Apache的),你可以使用它的「後臺人員」以及(視圖是控制檯)的幫助,你只需要添加一個cli.php或其他東西,處理cli參數(模塊,控制器,動作),創建請求對象並將其傳遞給調度器。

所以後臺工作的怎麼過你的作品觸發(EXEC?),請致電新創建的cli.php和享受您的ZF應用程序的特性(配置,自動載入,..)。

對於短,我不能告訴你一個cli.php會究竟是什麼樣子,但我發現這個教程: Using Zend Framework from the Command Line

重要對象:Zend_Controller_Request_Simple