簡體   English   中英

如何在容器編譯之前將自定義路由添加到Symfony 2?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM