浏览代码

added a LazyLoader for the routing

Fabien Potencier 14 年之前
父节点
当前提交
6ab277ee41

+ 2 - 5
src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

@@ -346,11 +346,8 @@ class FrameworkExtension extends Extension
             'Symfony\\Component\\Routing\\Matcher\\UrlMatcher',
             'Symfony\\Component\\Routing\\Generator\\UrlGeneratorInterface',
             'Symfony\\Component\\Routing\\Generator\\UrlGenerator',
-            'Symfony\\Component\\Routing\\Loader\\Loader',
-            'Symfony\\Component\\Routing\\Loader\\DelegatingLoader',
-            'Symfony\\Component\\Routing\\Loader\\LoaderResolver',
-            'Symfony\\Bundle\\FrameworkBundle\\Routing\\LoaderResolver',
-            'Symfony\\Bundle\\FrameworkBundle\\Routing\\DelegatingLoader',
+            'Symfony\\Component\\Routing\\Loader\\LoaderInterface',
+            'Symfony\\Bundle\\FrameworkBundle\\Routing\\LazyLoader',
         ));
     }
 

+ 6 - 1
src/Symfony/Bundle/FrameworkBundle/Resources/config/routing.xml

@@ -39,12 +39,17 @@
             <argument>%kernel.bundle_dirs%</argument>
         </service>
 
-        <service id="routing.loader" class="%routing.loader.class%">
+        <service id="routing.loader.real" class="%routing.loader.class%">
             <argument type="service" id="controller_name_converter" />
             <argument type="service" id="logger" on-invalid="null" />
             <argument type="service" id="routing.resolver" />
         </service>
 
+        <service id="routing.loader" class="Symfony\Bundle\FrameworkBundle\Routing\LazyLoader">
+            <argument type="service" id="service_container" />
+            <argument>routing.loader.real</argument>
+        </service>
+
         <service id="router" class="%router.class%">
             <argument type="service" id="routing.loader" />
             <argument>%routing.resource%</argument>

+ 64 - 0
src/Symfony/Bundle/FrameworkBundle/Routing/LazyLoader.php

@@ -0,0 +1,64 @@
+<?php
+
+namespace Symfony\Bundle\FrameworkBundle\Routing;
+
+use Symfony\Component\Routing\Loader\LoaderInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\Routing\Loader\LoaderResolver;
+
+/*
+ * This file is part of the Symfony framework.
+ *
+ * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
+ *
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
+ */
+
+/**
+ *
+ * @author Fabien Potencier <fabien.potencier@symfony-project.com>
+ */
+class LazyLoader implements LoaderInterface
+{
+    protected $container;
+    protected $service;
+
+    public function __construct(ContainerInterface $container, $service)
+    {
+        $this->container = $container;
+        $this->service = $service;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function load($resource)
+    {
+        return $this->container->get($this->service)->load($resource);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function supports($resource)
+    {
+        return $this->container->get($this->service)->supports($resource);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getResolver()
+    {
+        return $this->container->get($this->service)->getResolver();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function setResolver(LoaderResolver $resolver)
+    {
+        $this->container->get($this->service)->setResolver($resolver);
+    }
+}