0

作業中の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

メインアプリケーションとワーカーの構成はほぼ同じであり(特に同じデータベース接続資格情報、自動読み込み設定)、ワーカーはメインアプリケーションのモデルにアクセスする必要があることに注意してください。

ご意見・ご感想をいただければ幸いです。

どうもありがとう、エンジェル

4

2 に答える 2

1

MVCは、Web環境(Apache)で役立つだけでなく、「バックグラウンドワーカー」にも使用できます(ビューはコンソールです)。cli.phpなどを追加し、cli引数(モジュール、コントローラー)を処理するだけです。 、action)、リクエストオブジェクトを作成し、ディスパッチャに渡します。

したがって、バックグラウンドワーカーのトリガーがどのように機能するか(exec?)、新しく作成したcli.phpを呼び出して、zfアプリケーションの機能(構成、自動読み込みなど)をお楽しみください。

簡単に言うと、cli.phpがどのように表示されるかはわかりませんが、このチュートリアルを見つけました: コマンドラインからのZendFrameworkの使用

あなたにとって重要なオブジェクト:Zend_Controller_Request_Simple

于 2012-05-01T21:20:04.843 に答える
1

ワーカーがcronjobを介してトリガーされる場合、ワーカーコンポーネントをモジュールにして、独自のコントローラーやビューなどを作成でき ます。次に、@ MonkeyMonkeyが示すように、コマンドラインスクリプトがそのモジュールにMVCリクエストを送信できます。

しかし、このワーカーコンポーネントは、cronによってトリガーされるcliスクリプトによって呼び出される機能を含むクラスであるサービスとしてより自然に機能する可能性があるように思われます。ZFベースのCLIスクリプト(オプションZend_Console_Getoptで、かなりクールなを使用)は、同じ構成とブートストラップクラスを使用し、リソースを選択的にブートストラップし(一部は、CLIベースのタスクには必要ない場合があります)、標準のMVCアプリと同じオートローダーを使用できます。 。

お気づきのとおり、これらのワーカーは、アプリのWebに面した部分からアクセスできるステータステーブルを更新するため、これらのページはリクエストに応じてステータスを読み取ったりレンダリングしたりできます。

Application_Service_MyWorkerそのファイルシステム構造に関しては、これらのサービスクラスにファイルに格納されているような名前を付けることができますapplication/services/MyWorker.phpApplication_Service_Worker_MyWorkerおそらく、に格納されているようなものを使用してさらにプッシュダウンしapplication/services/Worker/MyWorker.phpますが、後者では、マッパーやDbTableベースのモデルがで定義されているのと同様に、リソースオートローダーに別のリソースタイプのエントリを追加する必要がありますZend_Application_Module_Autoloader

于 2012-05-02T05:50:23.707 に答える