Skip to content

Commit

Permalink
[AsseticBundle] removed fake front controller from URL before creatin…
Browse files Browse the repository at this point in the history
…g route
  • Loading branch information
kriswallsmith committed Apr 21, 2011
1 parent 8ad9309 commit 6a227f8
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 13 deletions.
Expand Up @@ -15,23 +15,19 @@
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.
* Prepends a fake front controller so the asset knows where it is-ish.
*
* @author Kris Wallsmith <kris@symfony.com>
*/
class PrependControllerWorker implements WorkerInterface
class UseControllerWorker 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);
if ($targetUrl && '/' != $targetUrl[0] && 0 !== strpos($targetUrl, '_controller/')) {
$asset->setTargetUrl('_controller/'.$targetUrl);
}

return $asset;
}
}
Expand Up @@ -8,7 +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>
<parameter key="assetic.use_controller_worker.class">Symfony\Bundle\AsseticBundle\Factory\Worker\UseControllerWorker</parameter>
</parameters>

<services>
Expand All @@ -24,7 +24,7 @@
<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">
<service id="assetic.use_controller_worker" class="%assetic.use_controller_worker.class%" public="false">
<tag name="assetic.factory_worker" />
</service>
</services>
Expand Down
14 changes: 13 additions & 1 deletion src/Symfony/Bundle/AsseticBundle/Routing/AsseticLoader.php
Expand Up @@ -80,6 +80,17 @@ public function load($routingResource, $type = null)
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(
Expand All @@ -88,7 +99,8 @@ private function loadRouteForAsset(RouteCollection $routes, AssetInterface $asse
'pos' => $pos,
);

$pattern = $asset->getTargetUrl();
// remove the fake front controller
$pattern = str_replace('_controller/', '', $asset->getTargetUrl());

if ($format = pathinfo($pattern, PATHINFO_EXTENSION)) {
$defaults['_format'] = $format;
Expand Down

0 comments on commit 6a227f8

Please sign in to comment.