Bläddra i källkod

[AsseticBundle] finished and enabled php templating support

Kris Wallsmith 14 år sedan
förälder
incheckning
8d4dae9f2a

+ 1 - 1
src/Symfony/Bundle/AsseticBundle/DependencyInjection/AsseticExtension.php

@@ -37,7 +37,7 @@ class AsseticExtension extends Extension
         $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
         $loader->load('assetic.xml');
         $loader->load('templating_twig.xml');
-        // $loader->load('templating_php.xml'); // not ready yet
+        $loader->load('templating_php.xml');
 
         $config = self::processConfigs($configs, $container->getParameter('kernel.debug'), array_keys($container->getParameter('kernel.bundles')));
 

+ 81 - 0
src/Symfony/Bundle/AsseticBundle/Factory/Loader/AsseticHelperFormulaLoader.php

@@ -0,0 +1,81 @@
+<?php
+
+/*
+ * 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.
+ */
+
+namespace Symfony\Bundle\AsseticBundle\Factory\Loader;
+
+use Assetic\Factory\Loader\BasePhpFormulaLoader;
+
+/**
+ * Loads formulae from Symfony2 PHP templates.
+ *
+ * @author Kris Wallsmith <kris.wallsmith@symfony-project.com>
+ */
+class AsseticHelperFormulaLoader extends BasePhpFormulaLoader
+{
+    protected function registerPrototypes()
+    {
+        return array(
+            '$view[\'assetic\']->assets(*)'           => array(),
+            '$view[\'assetic\']->javascripts(*)'      => array('output' => 'js/*.js'),
+            '$view[\'assetic\']->stylesheets(*)'      => array('output' => 'css/*.css'),
+            '$view["assetic"]->assets(*)'             => array(),
+            '$view["assetic"]->javascripts(*)'        => array('output' => 'js/*.js'),
+            '$view["assetic"]->stylesheets(*)'        => array('output' => 'css/*.css'),
+            '$view->get(\'assetic\')->assets(*)'      => array(),
+            '$view->get(\'assetic\')->javascripts(*)' => array('output' => 'js/*.js'),
+            '$view->get(\'assetic\')->stylesheets(*)' => array('output' => 'css/*.css'),
+            '$view->get("assetic")->assets(*)'        => array(),
+            '$view->get("assetic")->javascripts(*)'   => array('output' => 'js/*.js'),
+            '$view->get("assetic")->stylesheets(*)'   => array('output' => 'css/*.css'),
+        );
+    }
+
+    protected function registerSetupCode()
+    {
+        return <<<'EOF'
+class Helper
+{
+    public function assets()
+    {
+        global $_call;
+        $_call = func_get_args();
+    }
+
+    public function javascripts()
+    {
+        global $_call;
+        $_call = func_get_args();
+    }
+
+    public function stylesheets()
+    {
+        global $_call;
+        $_call = func_get_args();
+    }
+}
+
+class View extends ArrayObject
+{
+    public function __construct(Helper $helper)
+    {
+        parent::__construct(array('assetic' => $helper));
+    }
+
+    public function get()
+    {
+        return $this['assetic'];
+    }
+}
+
+$view = new View(new Helper());
+EOF;
+    }
+}

+ 1 - 1
src/Symfony/Bundle/AsseticBundle/Factory/DirectoryResource.php

@@ -9,7 +9,7 @@
  * with this source code in the file LICENSE.
  */
 
-namespace Symfony\Bundle\AsseticBundle\Factory;
+namespace Symfony\Bundle\AsseticBundle\Factory\Resource;
 
 use Assetic\Factory\Resource\DirectoryResource as BaseDirectoryResource;
 use Symfony\Component\Templating\Loader\LoaderInterface;

+ 1 - 1
src/Symfony/Bundle/AsseticBundle/Factory/DirectoryResourceIterator.php

@@ -9,7 +9,7 @@
  * with this source code in the file LICENSE.
  */
 
-namespace Symfony\Bundle\AsseticBundle\Factory;
+namespace Symfony\Bundle\AsseticBundle\Factory\Resource;
 
 use Symfony\Component\Templating\Loader\LoaderInterface;
 

+ 1 - 1
src/Symfony/Bundle/AsseticBundle/Factory/FileResource.php

@@ -9,7 +9,7 @@
  * with this source code in the file LICENSE.
  */
 
-namespace Symfony\Bundle\AsseticBundle\Factory;
+namespace Symfony\Bundle\AsseticBundle\Factory\Resource;
 
 use Assetic\Factory\Resource\ResourceInterface;
 use Symfony\Bundle\FrameworkBundle\Templating\TemplateReference;

+ 1 - 1
src/Symfony/Bundle/AsseticBundle/Resources/config/assetic.xml

@@ -11,7 +11,7 @@
         <parameter key="assetic.cached_formula_loader.class">Assetic\Factory\Loader\CachedFormulaLoader</parameter>
         <parameter key="assetic.config_cache.class">Assetic\Cache\ConfigCache</parameter>
         <parameter key="assetic.asset_manager_cache_warmer.class">Symfony\Bundle\AsseticBundle\CacheWarmer\AssetManagerCacheWarmer</parameter>
-        <parameter key="assetic.directory_resource.class">Symfony\Bundle\AsseticBundle\Factory\DirectoryResource</parameter>
+        <parameter key="assetic.directory_resource.class">Symfony\Bundle\AsseticBundle\Factory\Resource\DirectoryResource</parameter>
 
         <parameter key="assetic.filter.coffee.class">Assetic\Filter\CoffeeScriptFilter</parameter>
         <parameter key="assetic.filter.cssrewrite.class">Assetic\Filter\CssRewriteFilter</parameter>

+ 2 - 2
src/Symfony/Bundle/AsseticBundle/Resources/config/templating_php.xml

@@ -6,8 +6,7 @@
 
     <parameters>
         <parameter key="assetic.helper.class">Symfony\Bundle\AsseticBundle\Templating\AsseticHelper</parameter>
-        <parameter key="assetic.php_formula_loader.class">Symfony\Bundle\AsseticBundle\Templating\FormulaLoader</parameter>
-        <parameter key="assetic.php_directory_resource.class"></parameter>
+        <parameter key="assetic.php_formula_loader.class">Symfony\Bundle\AsseticBundle\Factory\Loader\AsseticHelperFormulaLoader</parameter>
     </parameters>
 
     <services>
@@ -28,6 +27,7 @@
         </service>
         <service id="assetic.php_formula_loader.real" class="%assetic.php_formula_loader.class%" public="false">
             <tag name="assetic.templating.php" />
+            <argument type="service" id="assetic.asset_factory" />
         </service>
     </services>
 </container>

+ 0 - 1
src/Symfony/Bundle/AsseticBundle/Resources/config/templating_twig.xml

@@ -8,7 +8,6 @@
         <parameter key="assetic.twig_extension.dynamic.class">Symfony\Bundle\AsseticBundle\Twig\DynamicExtension</parameter>
         <parameter key="assetic.twig_extension.static.class">Symfony\Bundle\AsseticBundle\Twig\StaticExtension</parameter>
         <parameter key="assetic.twig_formula_loader.class">Assetic\Extension\Twig\TwigFormulaLoader</parameter>
-        <parameter key="assetic.twig_directory_resource.class"></parameter>
     </parameters>
 
     <services>

+ 0 - 2
src/Symfony/Bundle/AsseticBundle/Tests/FunctionalTest.php

@@ -90,8 +90,6 @@ class FunctionalTest extends \PHPUnit_Framework_TestCase
 
     public function testPhpRenderDebug()
     {
-        $this->markTestIncomplete('PHP templating is not ready yet.');
-
         $kernel = new TestKernel('test', true);
         $kernel->boot();
         $container = $kernel->getContainer();

+ 1 - 1
src/Symfony/Bundle/AsseticBundle/Tests/Resources/config/config.yml

@@ -6,7 +6,7 @@ framework:
         secret: xxxxxxxxxx
     router:        { resource: "%kernel.root_dir%/config/routing.yml" }
     validation:    { enabled: true, annotations: true }
-    templating:    { engines: ['twig'] }
+    templating:    { engines: ['twig', 'php'] }
     session:
         default_locale: en
         lifetime:       3600