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 に答える