ZF2:如何在自定义路由器中获取Zend \ Db \ Adapter?

时间:2012-07-30 14:34:39

标签: php zend-framework zend-framework2

在标题中,我很难在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

1 个答案:

答案 0 :(得分:3)

如果你想让我们获得som代码,那会更容易.. :)

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