让我进一步详细解释一下这个案例,因为标题并没有太长时间解释它。
我正在SF2之上构建一个迷你框架,用于我们的遗留系统。我们开发了一个迷你,简单的插件系统,每个插件都有自己的routing.xml,可能如下所示:
routes:
admin_plugins:
pattern: /manager/
defaults: { _controller: plugins\riCore\AdminController::indexAction }
我们希望显然将这些路由添加到routeCollection中,但是有一个调整:我们想要使用插件名称添加路由模式和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()过早地解决这个问题,也许必须有办法解决?
答案 0 :(得分: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']));
}