File tree Expand file tree Collapse file tree 4 files changed +76
-13
lines changed
Expand file tree Collapse file tree 4 files changed +76
-13
lines changed Original file line number Diff line number Diff line change @@ -23,18 +23,38 @@ class AppModule extends AbstractModule
2323 $this->install(new DbalModule('driver=pdo_sqlite&memory=true');
2424 }
2525}
26+ ```
27+
28+ ### for named binding
29+
30+ Set ` qualifer ` in 2nd parameter in DbalModule.
31+
32+ ``` php
33+ $this->install(new DbalModule('driver=pdo_sqlite&memory=true', 'log_db');
34+ ```
35+
36+ Use qualifer in ` @Inject ` .
2637
38+ ``` php
39+ /**
40+ * @Inject
41+ * @Named("log_db")
42+ */
43+ public function setLogDb(Connection $logDb)
44+ {
45+ $this->logDb = $logDb;
46+ }
2747```
28- ### DI trait
48+ ## DI trait
2949
30- * [ DbalInject] ( https://github.com/BEARSunday/BEAR.DbalModule/blob/master /src/DbalInject.php ) for ` Doctrine\DBAL\Driver\Connection ` interface
50+ * [ DbalInject] ( https://github.com/BEARSunday/BEAR.DbalModule/blob/1.x /src/DbalInject.php ) for ` Doctrine\DBAL\Driver\Connection ` interface
3151
32- ### Demo
52+ ## Demo
3353
3454 $ php docs/demo/run.php
3555 // It works!
3656
37- ### Requiuments
57+ ## Requiuments
3858
3959 * PHP 5.4+
4060 * hhvm
Original file line number Diff line number Diff line change 1010use Doctrine \DBAL \Driver \Connection ;
1111use Ray \DbalModule \Annotation \DbalConfig ;
1212use Ray \Di \AbstractModule ;
13+ use Ray \Di \Name ;
1314use Ray \Di \Scope ;
1415
1516class DbalModule extends AbstractModule
@@ -20,11 +21,18 @@ class DbalModule extends AbstractModule
2021 private $ config ;
2122
2223 /**
23- * @param string $config
24+ * @var string
25+ */
26+ private $ qualifier ;
27+
28+ /**
29+ * @param AbstractModule $config
30+ * @param string $qualifier
2431 */
25- public function __construct ($ config )
32+ public function __construct ($ config, $ qualifier = Name:: ANY )
2633 {
2734 $ this ->config = $ config ;
35+ $ this ->qualifier = $ qualifier ;
2836 }
2937
3038 /**
@@ -33,7 +41,7 @@ public function __construct($config)
3341 protected function configure ()
3442 {
3543 AnnotationRegistry::registerFile (__DIR__ . '/DoctrineAnnotations.php ' );
36- $ this ->bind ()->annotatedWith (DbalConfig::class)->toInstance ($ this ->config );
37- $ this ->bind (Connection::class)->toProvider (DbalProvider::class)->in (Scope::SINGLETON );
44+ $ this ->bind ()->annotatedWith ($ this -> qualifier )-> annotatedWith ( DbalConfig::class)->toInstance ($ this ->config );
45+ $ this ->bind (Connection::class)->annotatedWith ( $ this -> qualifier )-> toProvider (DbalProvider::class, $ this -> qualifier )->in (Scope::SINGLETON );
3846 }
3947}
Original file line number Diff line number Diff line change 88
99use Doctrine \DBAL \DriverManager ;
1010use Ray \DbalModule \Annotation \DbalConfig ;
11+ use Ray \Di \Di \PostConstruct ;
12+ use Ray \Di \InjectorInterface ;
1113use Ray \Di \ProviderInterface ;
14+ use Ray \Di \SetContextInterface ;
1215
13- class DbalProvider implements ProviderInterface
16+ class DbalProvider implements ProviderInterface, SetContextInterface
1417{
18+ /**
19+ * @var InjectorInterface
20+ */
21+ private $ injector ;
22+
23+ /**
24+ * @var string
25+ */
26+ private $ context ;
27+
1528 /**
1629 * @var array
1730 */
1831 private $ config ;
1932
33+ public function __construct (InjectorInterface $ injector )
34+ {
35+ $ this ->injector = $ injector ;
36+ }
37+
38+ public function setContext ($ context )
39+ {
40+ $ this ->context = $ context ;
41+ }
42+
2043 /**
21- * @param string $config
22- *
23- * @DbalConfig
44+ * @PostConstruct
2445 */
25- public function __construct ( $ config )
46+ public function init ( )
2647 {
48+ $ config = $ this ->injector ->getInstance ('' , DbalConfig::class . $ this ->context );
2749 if (is_array ($ config )) {
2850 $ this ->config = $ config ;
2951
@@ -40,6 +62,7 @@ public function __construct($config)
4062 throw new \InvalidArgumentException ('@DbalConfig ' );
4163 }
4264
65+
4366 /**
4467 * {@inheritdoc}
4568 */
Original file line number Diff line number Diff line change @@ -12,4 +12,16 @@ public function testModule()
1212 $ instance = (new Injector (new DbalModule ('driver=pdo_sqlite&memory=true ' ), $ _ENV ['TMP_DIR ' ]))->getInstance (Connection::class);
1313 $ this ->assertInstanceOf (Connection::class, $ instance );
1414 }
15+
16+ public function testQualifier ()
17+ {
18+ $ db1Module = new DbalModule ('driver=pdo_sqlite&memory=true ' ,'db1 ' );
19+ $ db2Module = new DbalModule ('driver=pdo_sqlite&memory=true ' ,'db2 ' );
20+ $ db1 = (new Injector ($ db1Module , $ _ENV ['TMP_DIR ' ]))->getInstance (Connection::class, 'db1 ' );
21+ $ db2 = (new Injector ($ db2Module , $ _ENV ['TMP_DIR ' ]))->getInstance (Connection::class, 'db2 ' );
22+ $ db1a = (new Injector ($ db1Module , $ _ENV ['TMP_DIR ' ]))->getInstance (Connection::class, 'db1 ' );
23+ $ this ->assertInstanceOf (Connection::class, $ db1 );
24+ $ this ->assertNotSame ($ db1 , $ db2 );
25+ $ this ->assertSame ($ db1 , $ db1a );
26+ }
1527}
You can’t perform that action at this time.
0 commit comments