ZF2:サービスロケーターを使用せずにデータベースアダプターを取得する

読者の皆さん、こんにちは!

多くの開発者がZendフレームワーク2の研究を開始し、ほとんどの場合、データベースに永続的なアダプターを使用するという問題に直面しました。 この問題の解決に役立った興味深い記事を共有したいと思います。



問題は、サービスロケーターを介してではなく、TableGatewayインスタンスを直接取得することです。
TableGatewayオブジェクトでは、コンストラクタゲートウェイに渡されるdbAdapterオブジェクトを構成する必要があります。

次の解決策は、この問題の解決に役立ちます。

1. dbAapterの静的ストレージとしてGlobalAdaperFeatureを使用します。

use Zend\Db\TableGateway\Feature; $feature = new Feature\GlobalAdapterFeature(); 


2.ブートストラップメソッドをモジュール構成ファイルに追加します。

 public function onBootstrap($e) { // set static adapter for all module table gateways $serviceManager = $e->getApplication()->getServiceManager(); $dbAdapter = $serviceManager->get('Zend\Db\Adapter\Adapter'); Feature\GlobalAdapterFeature::setStaticAdapter($dbAdapter); } 


3.これで、TableGatewayコンストラクターで既にロードされたdbAdapterオブジェクトにアクセスできます。

 public function __construct() { $this->featureSet = new Feature\FeatureSet(); $this->featureSet->addFeature(new Feature\GlobalAdapterFeature()); $this->initialize(); } 


したがって、コンストラクタのゲートウェイにdbAdapterが埋め込まれています。 もちろん、これはベストプラクティスではありませんが、アプリケーションに柔軟性を追加することができますが、いずれにしても、dbAdapterオブジェクトはサービスロケーターを使用して作成されましたが、ブートモジュールレベルのすべてのtableGatewaysのシングルトンメソッドとして作成されました。

Source: https://habr.com/ru/post/J175523/


All Articles