1

如标题所示,我正在努力访问路由器内的 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

4

1 回答 1

3

如果你能给我们一些代码会更容易.. :)

我的建议是使用工厂来实例化您的自定义路由器或将其设置为可调用类(要求您实现 ServiceLocatorAwareInterface 以便您可以在路由器中进行设置)

于 2012-08-02T09:00:16.970 回答