9

Acabo de leer el tutorial ZF2 akrabat de Rob Allen (http://akrabat.com/wp-content/uploads/Getting-Started-with-Zend-Framework-2.pdf) sobre cómo inyectar dependencias en tus cosas, como insertar tu adaptador de tabla en tus clases de tabla.Zend Framework 2 - DI y tener que inyectar el adaptador de mesa en las tablas ... ¿tedioso?

Ésta parece ser la forma en que debo hacerlo:

 array(
      'Application\Model\DbTable\UserTable', 
     ) => array(
      'parameters' => array(
       'config' => 'Zend\Db\Adapter\PdoMysql', 
      ) 
     ), 

     array(
      'Application\Model\DbTable\UserProfileTable', 
     ) => array(
      'parameters' => array(
       'config' => 'Zend\Db\Adapter\PdoMysql', 
      ) 
     ), 

Ok eso es muy bueno pero tengo alrededor de 84 mesas para que voy a tener que agregar cada uno de estos y dicen que Quiero que PdoMySQL inyecte en todos ellos. ¿Hay alguna forma adecuada de hacerlo, como especificar mi carpeta completa de DbTable? Ni siquiera esto funciona:

 array(
      'Application\Model\DbTable\UserTable', 
      'Application\Model\DbTable\UserProfileTable' 
     ) => array(
      'parameters' => array(
       'config' => 'Zend\Db\Adapter\PdoMysql', 
      ) 
     ), 

¿Alguien más ha hecho esto y ha encontrado una solución mejor?

Gracias, Dom

+0

Solo mirando donde defines las matrices (y utilizas las matrices para las claves), tuve la impresión de que las teclas de matriz solo podían ser cadenas o enteros en PHP. ¿Alguien puede corregirme si esto está mal? – bearver

+0

Sí tiene sentido: D He intentado inyectar el adaptador de base de datos directamente en AbstractTable pero es una clase abstracta y eso no funciona. Luego intenté ponerlo en Zend \ Db \ Table \ Table y luego extendí esto, pero de nuevo eso no funciona ... Tiene que haber una mejor forma de evitar esto que especificar el mismo código 90 veces –

Respuesta

1

Su pregunta es buena, y estoy de acuerdo, este es un escenario en el que la inyección de dependencias no tiene sentido. Aún no he navegado por la API de ZF2, ¿abandonaron por completo la capacidad de vincular el adaptador en el nivel de conexión, en lugar del nivel de la tabla?

En mi clase de base de datos utilizo un archivo yaml para almacenar las configuraciones de conexión; nombre de usuario, contraseña, adaptador, etc. Lo hice en un formato que se puede pasar directamente a Zend_Config, que luego se puede pasar a la clase Zend_Db.

// Entry in connection.yml 
database: 
    adapter: Pdo_Mysql 
    params: 
    host:  myhost 
    dbname: mydatabase 
    username: myusername 
    password: mypassword 

// Parse yaml file to get above snippet in an array ($dbConnectionparams) 

$config = new Zend_Config($dbConnectionParams); 

$dbo = Zend_Db::factory($config->database); 

Ahora bien, si alguna vez tengo que cambiar el adaptador para una conexión de base de datos que sólo se necesita cambiar en un solo lugar, el archivo connection.yml.

Además, creo que puede almacenar este tipo de datos de conexión en otros formatos (xml, etc.).

+0

Creo que puedo haber tropezado sobre la respuesta! Parece que EvanDotPro ha creado una clase 'DiPdoMysql' que parece una extensión de PdoMysql para Di amigable. https://github.com/EvanDotPro/EdpUser El DiPdoMysql está en https://github.com/EvanDotPro/EdpCommon/tree/master/src/Zend/Db/Adapter –

+0

@DominicWatson: Interesante, parece que ZF2 debería tenerort este tipo de comportamiento de forma nativa. –

+0

Sí, creo que recuerdo haber leído que su clase DiPdoMysql estaba allí hasta que Zend \ DB se reescribió por completo: D –

Cuestiones relacionadas