diff -r 000000000000 -r 7f95f8617b0b vendor/bundles/Symfony/Bundle/AsseticBundle/Routing/AsseticLoader.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/bundles/Symfony/Bundle/AsseticBundle/Routing/AsseticLoader.php Sat Sep 24 15:40:41 2011 +0200 @@ -0,0 +1,122 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Symfony\Bundle\AsseticBundle\Routing; + +use Assetic\Asset\AssetInterface; +use Assetic\Factory\LazyAssetManager; +use Symfony\Bundle\AsseticBundle\Config\AsseticResource; +use Symfony\Component\Config\Loader\Loader; +use Symfony\Component\Config\Resource\FileResource; +use Symfony\Component\Routing\Route; +use Symfony\Component\Routing\RouteCollection; + +/** + * Loads routes for all assets. + * + * Assets should only be served through the routing system for ease-of-use + * during development. + * + * For example, add the following to your application's routing_dev.yml: + * + * _assetic: + * resource: . + * type: assetic + * + * In a production environment you should use the `assetic:dump` command to + * create static asset files. + * + * @author Kris Wallsmith + */ +class AsseticLoader extends Loader +{ + protected $am; + + public function __construct(LazyAssetManager $am) + { + $this->am = $am; + } + + public function load($routingResource, $type = null) + { + $routes = new RouteCollection(); + + // resources + foreach ($this->am->getResources() as $resources) { + if (!$resources instanceof \Traversable) { + $resources = array($resources); + } + foreach ($resources as $resource) { + $routes->addResource(new AsseticResource($resource)); + } + } + + // routes + foreach ($this->am->getNames() as $name) { + $asset = $this->am->get($name); + $formula = $this->am->getFormula($name); + + $this->loadRouteForAsset($routes, $asset, $name); + + $debug = isset($formula[2]['debug']) ? $formula[2]['debug'] : $this->am->isDebug(); + $combine = isset($formula[2]['combine']) ? $formula[2]['combine'] : !$debug; + + // add a route for each "leaf" in debug mode + if (!$combine) { + $i = 0; + foreach ($asset as $leaf) { + $this->loadRouteForAsset($routes, $leaf, $name, $i++); + } + } + } + + return $routes; + } + + /** + * Loads a route to serve an supplied asset. + * + * The fake front controller that {@link UseControllerWorker} adds to the + * target URL will be removed before set as a route pattern. + * + * @param RouteCollection $routes The route collection + * @param AssetInterface $asset The asset + * @param string $name The name to use + * @param integer $pos The leaf index + */ + private function loadRouteForAsset(RouteCollection $routes, AssetInterface $asset, $name, $pos = null) + { + $defaults = array( + '_controller' => 'assetic.controller:render', + 'name' => $name, + 'pos' => $pos, + ); + + // remove the fake front controller + $pattern = str_replace('_controller/', '', $asset->getTargetPath()); + + if ($format = pathinfo($pattern, PATHINFO_EXTENSION)) { + $defaults['_format'] = $format; + } + + $route = '_assetic_'.$name; + if (null !== $pos) { + $route .= '_'.$pos; + } + + $routes->add($route, new Route($pattern, $defaults)); + } + + public function supports($resource, $type = null) + { + return 'assetic' == $type; + } +}