Zend Frameworkのハイライトの簡単なツアー

それは単なるフレームワークですか、それとも、このフレームワークはPHPコミュニティの誇りを体現していますか? 構成がばらばらになっている... PLの愛の対象であり、優れたMVCを持っているため、Zend Frameworkは最高のPHPフレームワークです。







ここでは、この質問に対する答えは見つかりませんが、ServiceManagerとModuleManagerについて学習します。







バカを実行します!







警告



  1. この資料は、私がZend Framework 2で探していたものに基づいており、一部の場所ではバージョン1の言及さえあります。 基本的な点が考慮され、グローバルに変更される可能性は低いため、他のバージョンと比較すると、これが問題になるとは思わない。
  2. 推論と翻訳(および段落1)には、私のソースと元のソースの両方に重大なエラーが存在する可能性があります。 すべてにリンクが与えられ、あなた自身の作業にはメモ[mine]が付きます。
  3. それはグーグルで、私のように混乱した人を対象としています。 ブログ、説明、双方向性の展開はありません。 しかし、2つの写真とキティがあります。


内容





規約



ソース 、少し[私の]









デバイスフレームワーク



一般的な構造と関係



出所







Zend\Mvc\Application



と、 Zend\ServiceManager\ServiceManager



オブジェクトが作成され、 Zend\Mvc\Service\ServiceManagerConfig



を通じて設定されます。 ServiceManagerConfig



は、 config/application.config.php



(または作成時にApplication



に渡される他のアプリケーション構成)から構成を取得します。 Zend\Mvc\Service



名前空間で表されるすべてのサービスとファクトリーのうち、 ServiceManagerConfig



は、 EventManager



およびModuleManager



3 SharedEventManager



担当します。







その後、 Application



ModuleManager



取得しModuleManager



。 この時点で、 ModuleManager



ServiceManager



を介して、 Zend\Mvc\Service\ServiceListenerFactory



提供されるサービスとファクトリを構成します。 このアプローチにより、メインアプリケーションの構成を簡素化し、開発者がモジュールからMVCシステムのさまざまな部分を構成し、これらのMVCのサービスのデフォルト構成をオーバーライドできるようになります。










Zend\Mvc\Service\ModuleManagerFactory



ModuleManager



で表されるZend\Mvc\Service\ModuleManagerFactory



。 これはおそらくMVCスタックで最も複雑なファクトリーです。 ModuleManager



は、キーmodule_listener_options



およびmodules



使用してApplicationConfig



サービスがデプロイ( Di )されることをmodule_listener_options



していmodules









抽出されたmodule_listener_options



を使用して、 Zend\ModuleManager\Listener\DefaultListenerAggregate



インスタンスを作成します。 次に、 ServiceListener



という名前のServiceListener



があるかどうかを確認し、ない場合は、 Zend\Mvc\Service\ServiceListenerFactory



という名前のファクトリを使用します。 getServiceConfig



getControllerConfig



getControllerPluginConfig



getViewHelperConfig



モジュールのリスナーなど、多くのリスナーサービスがServiceListener



に追加されます。







次に、 ModuleManager



ModuleManager



サービスを取得し、上記のリスナーをアタッチします。 「ServiceManager」パラメーターをサービスマネージャーオブジェクトに設定することにより、 Zend\ModuleManager\ModuleEvent



インスタンスを作成します。 最後に、 Zend\ModuleManager\ModuleManager



インスタンスを作成し、 Zend\ModuleManager\ModuleManager



Zend\ModuleManager\ModuleManager



を実装しModuleEvent









[mine]コードがより明確な場合:







 <?php namespace Zend\Mvc\Service; use Zend\ModuleManager\Listener\DefaultListenerAggregate; use Zend\ModuleManager\Listener\ListenerOptions; use Zend\ModuleManager\ModuleEvent; use Zend\ModuleManager\ModuleManager; use Zend\ServiceManager\FactoryInterface; use Zend\ServiceManager\ServiceLocatorInterface; class ModuleManagerFactory implements FactoryInterface { public function createService(ServiceLocatorInterface $serviceLocator) { if (!$serviceLocator->has('ServiceListener')) { $serviceLocator->setFactory('ServiceListener', 'Zend\Mvc\Service\ServiceListenerFactory'); } $configuration = $serviceLocator->get('ApplicationConfig'); $listenerOptions = new ListenerOptions($configuration['module_listener_options']); $defaultListeners = new DefaultListenerAggregate($listenerOptions); $serviceListener = $serviceLocator->get('ServiceListener'); $serviceListener->addServiceManager( $serviceLocator, 'service_manager', 'Zend\ModuleManager\Feature\ServiceProviderInterface', 'getServiceConfig' ); //        $events = $serviceLocator->get('EventManager'); $events->attach($defaultListeners); $events->attach($serviceListener); $moduleEvent = new ModuleEvent; $moduleEvent->setParam('ServiceManager', $serviceLocator); $moduleManager = new ModuleManager($configuration['modules'], $events); $moduleManager->setEvent($moduleEvent); return $moduleManager; } }
      
      





プラグイン



出所







コントローラーアーキテクチャには、独自のコードを追加できるプラグインシステムが含まれており、コントローラーの寿命中に特定のイベントが発生したときに呼び出されます。 フロントコントローラーは、プラグインブローカーをユーザープラグインのレジストリとして使用します;プラグインブローカーは、フロントコントローラーを介して登録された各プラグインでイベントメソッド呼び出しも提供します。







イベントメソッドは抽象クラスZend_Controller_Plugin_Abstract



で定義されZend_Controller_Plugin_Abstract



。このクラスからすべてのユーザープラグインが継承する必要があります







可視化



[私の]









コミュニケーションズ



コミュニケーション







スキーム



スキーム







著者から



気配りのある読者は、記事はToasterへのリンクから始まり、ServiceManagerとModuleManagerの違いについて質問され、記事のテキストはそれらから始まることに注意しました。 偶然? そうは思いません 実際のところ、Habrはフレームワークの基礎を理解し始めた最初の場所であり、 出版物が混乱をもたらしました。そこでは、ブログが記事の著者によるコメント付きのドキュメントから再作成されました。 ModuleManagerの説明がなかったために、間違った理由(モジュールがServiceManagerに登録されている)に追い込まれ、この記事が執筆されました。







便利なリンク



コピーペーストを行い、1つのトピックで6つの部分を成長させたくないので、ZFのブックマークのリストをメモで囲みます。







注意ネタバレ!

ブログ



Habrからの3つの記事で







  • https://habr.com/post/192522/
  • ZendSkeletonApplicationで簡単なブログを作成するためのドキュメントの無料翻訳。 構成、ServiceManager(またはModuleManager、私はまだ理解していません)、およびサードパーティライブラリの接続について説明します。


オリジナルのブログドキュメント









イベントマネージャー



一次審査









詳細分析









サービスマネージャー



クイックスタート









詳細分析









モジュールマネージャー



ドキュメント









私は短い遠足が長すぎず、有用であったことを願っています。 もちろん、Habrの規則および現在のロシア連邦の法律で許可されている編集、提案、批判、およびその他の行動は受け入れられます。










私たちが値するボーナス:







キティ



(= ^・Ω・^ =)








All Articles