Jelajahi Sumber

[AsseticBundle] added factory worker to fix paths when use_controller is on

Kris Wallsmith 14 tahun lalu
induk
melakukan
5a9a65701b

+ 37 - 0
src/Symfony/Bundle/AsseticBundle/Factory/Worker/PrependControllerWorker.php

@@ -0,0 +1,37 @@
+<?php
+
+/*
+ * This file is part of the Symfony framework.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
+ */
+
+namespace Symfony\Bundle\AsseticBundle\Factory\Worker;
+
+use Assetic\Asset\AssetInterface;
+use Assetic\Factory\Worker\WorkerInterface;
+
+/**
+ * Prepends a fake front controller to every asset's target URL.
+ *
+ * This worker should only be added when the use_controller configuration
+ * option is true. It changes the target URL to include the front controller.
+ *
+ * @author Kris Wallsmith <kris@symfony.com>
+ */
+class PrependControllerWorker implements WorkerInterface
+{
+    const CONTROLLER = 'front_controller/';
+
+    public function process(AssetInterface $asset)
+    {
+        $targetUrl = $asset->getTargetUrl();
+
+        if ($targetUrl && '/' != $targetUrl[0] && 0 !== strpos($targetUrl, self::CONTROLLER)) {
+            $asset->setTargetUrl(self::CONTROLLER.$targetUrl);
+        }
+    }
+}

+ 4 - 0
src/Symfony/Bundle/AsseticBundle/Resources/config/controller.xml

@@ -8,6 +8,7 @@
         <parameter key="assetic.controller.class">Symfony\Bundle\AsseticBundle\Controller\AsseticController</parameter>
         <parameter key="assetic.routing_loader.class">Symfony\Bundle\AsseticBundle\Routing\AsseticLoader</parameter>
         <parameter key="assetic.cache.class">Assetic\Cache\FilesystemCache</parameter>
+        <parameter key="assetic.prepend_controller_worker.class">Symfony\Bundle\AsseticBundle\Factory\Worker\PrependControllerWorker</parameter>
     </parameters>
 
     <services>
@@ -23,5 +24,8 @@
         <service id="assetic.cache" class="%assetic.cache.class%" public="false">
             <argument>%assetic.cache_dir%/assets</argument>
         </service>
+        <service id="assetic.prepend_controller_worker" class="%assetic.prepend_controller_worker.class%" public="false">
+            <tag name="assetic.factory_worker" />
+        </service>
     </services>
 </container>