[英]How to add custom routes to Symfony 2 before container compilation?
讓我更詳細地說明該情況,因為標題過長而無法很好地說明該情況。
我正在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()的事實,也許必須有一種解決方法?
要回答我的問題,是的,它似乎有效。 我只是還沒有找到一種使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']));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.