在标题中,我很难在Router中访问DBAdapter。实现ServiceLocatorAwareInterface没有多大帮助(ZF2没有注入任何东西)。在具有自定义工厂的模块中将其声明为服务也不是一种选择,因为它扩展了Http / Parts路由器并且需要根据路由传递配置参数(我不想对它们进行硬编码)
我已经尝试过:
module.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'或factory移动到应用程序配置后的行为相同。
目前正在使用Zend Framework 2 RC1
答案 0 :(得分:3)
如果你想让我们获得som代码,那会更容易.. :)
我的建议是使用工厂来实现自定义路由器或将其设置为可调用类(需要您实现ServiceLocatorAwareInterface以便在路由器中进行设置)