1

让我更详细地解释一下这个案例,因为标题如果太长就不能很好地解释它。

我正在 SF2 之上构建一个迷你框架,以与我们的遗留系统一起使用。我们开发了一个迷你的、简单的插件系统,每个插件都有自己的 routing.xml,如下所示:

routes:
  admin_plugins:
    pattern:  /manager/
    defaults: { _controller: plugins\riCore\AdminController::indexAction }

我们显然想将这些路由添加到 routeCollection 中,但是有 1 个调整:我们希望在路由模式和 id 前面加上插件名称。我们曾经遍历插件列表并手动执行如下操作:

self::$container->get('router')->getRouteCollection()->add($plugin_lc_name . '_' . $key, new Route($route['pattern'], $route['defaults'], $route['requirements'], $route['options']));

然而,现在我们开始使用 SF2 内核并编译容器,我们开始遇到这个问题:

[21-Oct-2012 08:40:57] PHP Fatal error:  Call to undefined method Symfony\Component\Routing\RouteCollection::__set_state() in plugins\cache\prod\pluginsProdProjectContainer.php on line 791

所以我认为这可能是由于我们试图 getRouteCollection() 太快了,也许必须有办法解决?

4

1 回答 1

1

要回答我的问题,是的,它似乎有效。我只是还没有找到让 SF2 缓存这些路由的方法。下面是我用来添加动态路由的部分代码。如您所见,我想为路由添加某些前缀

$plugin_lc_name = strtolower($plugin);
                foreach ($plugins_settings[$plugin]['routes'] as $key => $route) {
                    $route = array_merge(array('pattern'      => '',
                                               'defaults'     => array(),
                                               'requirements' => array(),
                                               'options'      => array()), $route);
                    if (strpos($route['pattern'], '/') !== false)
                        $route['pattern'] = $plugin_lc_name . $route['pattern'];
                    else
                        $route['pattern'] = $plugin_lc_name . '_' . $route['pattern'];

                    $container::get('router')->getRouteCollection()->add($plugin_lc_name . '_' . $key, new Route($route['pattern'], $route['defaults'], $route['requirements'], $route['options']));
                }
于 2012-11-23T19:53:20.153 回答