zf3 自定义数据库工厂不想申请
zf3 Custom database factory doesn't want to apply
我对数据库自定义工厂有奇怪的行为。
例如,我想使用 BjyProfiler 并创建 1 个这样的配置:
'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',
),
),
所以为了使用 Zend\Db 我在 modules.config.php "Zend\Db" 中添加了模块(否则我会得到异常)。问题是当我想获得 "Zend\Db\Adapter\Adapter" 时,它永远不会通过 "Database\Adapter\MainAdapterFactory" 并且我不知道为什么......它使用一些默认适配器。我试图将工厂声明放在 global.php、local.php 中,但它不起作用。为什么会这样?在 zf2 中这段代码没问题...
如果重要的话,我会使用 composer。
更新:在我的最终配置中,我有:
'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)
...
...
我不知道别名是从哪里来的 'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterInterface'
,但我认为这就是问题所在。
'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterInterface'
来自框架。
我建议您使用自己的适配器(我们称之为 MyAdapter
)扩展原始 'Zend\Db\Adapter\Adapter'
,并使用您的自定义适配器:
'service_manager' => array(
'factories' => array(
'Zend\Db\Adapter\MyAdapter' => 'Database\Adapter\MainAdapterFactory',
),
),
我对数据库自定义工厂有奇怪的行为。
例如,我想使用 BjyProfiler 并创建 1 个这样的配置:
'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',
),
),
所以为了使用 Zend\Db 我在 modules.config.php "Zend\Db" 中添加了模块(否则我会得到异常)。问题是当我想获得 "Zend\Db\Adapter\Adapter" 时,它永远不会通过 "Database\Adapter\MainAdapterFactory" 并且我不知道为什么......它使用一些默认适配器。我试图将工厂声明放在 global.php、local.php 中,但它不起作用。为什么会这样?在 zf2 中这段代码没问题...
如果重要的话,我会使用 composer。
更新:在我的最终配置中,我有:
'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)
...
...
我不知道别名是从哪里来的 'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterInterface'
,但我认为这就是问题所在。
'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterInterface'
来自框架。
我建议您使用自己的适配器(我们称之为 MyAdapter
)扩展原始 'Zend\Db\Adapter\Adapter'
,并使用您的自定义适配器:
'service_manager' => array(
'factories' => array(
'Zend\Db\Adapter\MyAdapter' => 'Database\Adapter\MainAdapterFactory',
),
),