2016-11-10 5 views
1

Ich habe seltsames Verhalten mit Datenbank benutzerdefinierte Fabrik.zf3 Benutzerdefinierte Datenbankfabrik möchte nicht angewendet werden

Zum Beispiel möchte ich BjyProfiler verwenden und erstellen 1 Config wie folgt aus:

'db' => array(
    'driver' => 'Pdo', 
    'dsn' => 'mysql:dbname=framework;host=localhost', 
    'username' => 'root', 
    'password' => '', 
    'driver_options' => array(
     PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'' 
    ), 
), 
'service_manager' => array(
    'factories' => array(
     'Zend\Db\Adapter\Adapter' => 'Database\Adapter\MainAdapterFactory', 
    ), 
), 

So Zend \ Db verwenden ich das Modul in modules.config.php "Zend \ Db" hinzugefügt (sonst bekomme ich Ausnahmen). Das Problem ist, dass wenn ich "Zend \ Db \ Adapter \ Adapter" bekommen will, es nie durch "Datenbank \ Adapter \ MainAdapterFactory" geht und ich weiß nicht warum ... Es benutzt einen Standard-Adapter. Ich habe versucht, Factory-Deklaration in global.php, local.php zu setzen und es funktioniert nicht. Warum passiert dies? In ZF2 ist dieser Code in Ordnung ...

Ich benutze Komponist, wenn das wichtig ist.

Update: In meinem letzten Config ich habe:

'service_manager' => 
    array (size=5) 
     'aliases' => 
      array (size=11) 
      ... 
      'Zend\Db\Adapter\Adapter' => string 'Zend\Db\Adapter\AdapterInterface' (length=32) 
      ... 
     'factories' => 
      array (size=19) 
      ... 
      'Zend\Db\Adapter\AdapterInterface' => string 'Zend\Db\Adapter\AdapterServiceFactory' (length=37) 
      ... 
      'Zend\Db\Adapter\Adapter' => string 'Database\Adapter\Factory\MainAdapterFactory' (length=43) 
     'abstract_factories' => 
      array (size=3) 
      ... 
      1 => string 'Zend\Db\Adapter\AdapterAbstractServiceFactory' (length=45) 
      ... 
    ... 

Ich weiß nicht, woher es kommt alias 'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterInterface' aber ich denke, das ist das Problem.

Antwort

0

Die 'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterInterface' stammen aus dem Framework.

ich vorgeschlagen, dass Sie die Original-'Zend\Db\Adapter\Adapter' mit Ihrem eigenen Adapter (nennen wir es MyAdapter) zu erstreckt, und Ihre benutzerdefinierten Adapter verwenden:

'service_manager' => array(
    'factories' => array(
     'Zend\Db\Adapter\MyAdapter' => 'Database\Adapter\MainAdapterFactory', 
    ), 
), 
+0

, dass das Problem war, ja. Ich habe vergessen, die Antwort hinzuzufügen. Vielen Dank! – Botman

Verwandte Themen