如标题所示,我正在努力访问路由器内的 DBAdapter。实现 ServiceLocatorAwareInterface 并没有多大帮助(ZF2 不注入任何东西)。将其声明为具有自定义工厂的模块中的服务也不是一种选择,因为它扩展了 Http/Parts 路由器并需要根据路由传递的配置参数(我不想对它们进行硬编码)
我已经尝试过的:
模块.config.php:
(...)
'router' => array(
'routes' => array(
'adm' => array(
'type' => 'Custom\Mvc\Router\Http\Segment',
'options' => array(
'route' => '/admin[/:language[/:controller[/:action[/:params]]]]',
'constraints' => array(
'language' => '(pl|en)',
'controller' => "[a-zA-Z0-9_\-]*",
'action' => "[a-zA-Z0-9_\-]*",
'params' => "(.*)",
),
'defaults' => array( ... ),
),
'may_terminate' => true,
),
),
),
'service_manager' => array(
(...)
'invokables' => array(
'Custom\Mvc\Router\Http\Segment' => 'Custom\Mvc\Router\Http\Segment',
),
),
(...)
到目前为止,Custom\Mvc\Router\Http\Segment 只是 Zend\Mvc\Router\Http\Segment 的一个副本,并以类似的方式添加了接口 ServiceLocatorAwareInterface、AdapterAwareInterface 和相应的方法:
public function setServiceLocator(ServiceLocatorInterface $serviceLocator)
{
var_dump($serviceLocator);
exit();
}
它从不进入 setServiceLocator 方法,只有 RouteInterface::factory(),然后调用构造函数。
再次设置工厂也没有帮助 - 代码没有执行。将“invocables”或工厂移动到应用程序配置后,行为相同。
目前使用 Zend Framework 2 RC1