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のシングルトンメソッドとして作成されました。



All Articles