3

我一直在尝试配置我们Module.php以使用模块管理器侦听器进行配置(即在 下可用的接口Zend\ModuleManager\Feature\*)。具体来说,我希望能够在 main之外module.config.php配置我的模块的路由。我还没有找到任何实际的例子。

我发现,如果我正确阅读了文档,该方法getRouteConfig()应该在我的路由中合并到由提供的数组中getConfig()吗?

模块.php

class Module implements Feature\RouteProviderInterface
{
//...
  public function getRouteConfig()
  {
    return include __DIR__ . '/config/route.config.php';
  }
  //...
}

/config/route.config.php

return array(

  'route_manager' => array(
    'router' => array (
      'routes' => array(
         //.. routes that were working correctly when added to module.config.php
      ),
     ),
   ),
 );

我可以看到通过返回的数组,getRouteConfig()所以我知道该方法被正确调用。

也许我误解了上述界面的目的,或者我没有提供正确的“密钥”(route_manager)来正确合并,因为我的路线得到了 404。

任何帮助,将不胜感激!

4

3 回答 3

3

我还没有按照您提到的方式完成此操作,但是方法中route_manager不需要密钥getRouteConfig()

这是因为所有的get{$specificManager}Config()方法都是直接从它们各自的管理器类中调用的。因此不需要初始密钥。使用另一个术语,使用时getRouteConfig()您已经在route_manager. 与您使用时相同,您getServiceConfig()已经在service_manager. 但是getConfig(),在应用程序范围内,因此访问应用程序部分的配置,您需要专门解决 tose。

需要注意的一点是:getConfig()可以缓存 的配置以提高性能,而所有其他get{$specificManager}Config()方法都不能。特别是在 RouteConfiguration 的情况下,我强烈建议getConfig()为您的 RouteConfig 使用 -Method。

如果您确实需要分离配置,那么我建议您使用@Hendriq 为您显示的方式。

于 2013-10-02T09:57:37.087 回答
2

好吧,我有它的工作,但我只使用getConfig(). 要做的是我array_mergegetConfig().

public function getConfig()
{
    return array_merge(
        require_once 'path_to_config/module.config.php',
        require_once 'path_to_config/routes.config.php'
    );
}

router.config.php看起来像:

return [
    'router' => [
        'routes' => [
            // routes
        ]
    ]
];

这样我也得到了一些其他的配置文件(ACL)。

编辑感谢文章Understanding ZF2-Configuration,我有了一个想法。我认为你的数组不应该

return array(
    'route_manager' => array(
        'router' => array (
            'routes' => array(
                //.. routes that were working correctly when added to module.config.php
            )
        )
    )
);

而是_

return array(
    'router' => array (
        'routes' => array(
            //.. routes that were working correctly when added to module.config.php
        ),
    ),
);
于 2013-10-02T09:39:03.137 回答
2

getRouteConfig与其他提供程序类似,因此您可以创建一些自定义路由。我想你想要做的最适合通过 hendriq 的方法。

getRouteConfig可以在http://zf2cheatsheet.com/找到一个示例

public function getRouteConfig()
{
    return array(
        'factories' => array(
            'pageRoute' => function ($routePluginManager) {
                $locator = $routePluginManager->getServiceLocator();
                $params = array('defaults' => array('controller' => 'routeTest','action' => 'page','id' => 'pages'));
                $route = Route\PageRoute::factory($params);
                $route->setServiceManager($locator);
                return $route;
            },
        ),
    );
}

在我们的Module\Route命名空间中,我们创建PageRoute实现的类Zend\Mvc\Http\RouteInterface,在我们的特定情况下,例如,Zend\ServiceManager\ServiceManagerAwareInterface. 现在只需实现接口的功能......在示例中,他使用Doctrine从数据库中加载页面。

最后,我们可以将新的自定义路由添加到我们的module.config.php,以便可以使用它:

'page' => array(
    'type' => 'pageRoute',
),

正如您在最后一步中看到的那样,我们回到 Hendriq 的解决方案,因为预期用途不是将路由加载到路由器中,而是创建自定义路由。

希望这可以帮助

于 2013-10-07T11:48:55.033 回答