Преглед изворни кода

[DIC] Allows to custom layout files via config.yml

Timothée Barray пре 14 година
родитељ
комит
393b542cf7

+ 3 - 4
Controller/CRUDController.php

@@ -45,13 +45,12 @@ class CRUDController extends Controller
     }
 
     public function getBaseTemplate()
-    {
-
+    {        
         if($this->get('request')->isXmlHttpRequest()) {
-            return 'Sonata\BaseApplicationBundle::ajax_layout.twig';
+            return $this->container->getParameter('base_application.templates.ajax');
         }
 
-        return 'Sonata\BaseApplicationBundle::standard_layout.twig';
+        return $this->container->getParameter('base_application.templates.layout');
     }
 
     public function listAction()

+ 40 - 3
DependencyInjection/BaseApplicationExtension.php

@@ -28,7 +28,13 @@ use Symfony\Component\Finder\Finder;
  */
 class BaseApplicationExtension extends Extension
 {
-
+    protected $configNamespaces = array(
+      'templates' => array(
+        'layout',
+        'ajax'
+      )
+    );
+    
     /**
      * Loads the url shortener configuration.
      *
@@ -37,7 +43,12 @@ class BaseApplicationExtension extends Extension
      */
     public function configLoad($config, ContainerBuilder $container)
     {
-
+        // loads config from external files
+        $this->configLoadFiles($container);
+        
+        // setups parameters with values in config.yml, default values from external files used if not
+        $this->configSetup($config, $container);
+       
         // register the twig extension
         $container
             ->register('twig.extension.base_application', 'Bundle\Sonata\BaseApplicationBundle\Twig\Extension\BaseApplicationExtension')
@@ -59,7 +70,33 @@ class BaseApplicationExtension extends Extension
         }
 
         $container->setDefinition('base_application.admin.pool', $definition);
-
+    }
+    
+    protected function configLoadFiles($container)
+    {
+      $loader = new XmlFileLoader($container, __DIR__ . '/../Resources/config');
+      
+      foreach ($this->configNamespaces as $ns => $params)
+      {
+        $loader->load(sprintf('%s.xml', $ns));
+      }
+    }
+    
+    protected function configSetup($config, $container)
+    {
+      foreach ($this->configNamespaces as $ns => $params)
+      {
+        if (isset($config[$ns]))
+        {
+          foreach ($config[$ns] as $type => $template)
+          {
+            if (isset($config[$ns][$type]))
+            {
+              $container->setParameter(sprintf('base_application.templates.%s', $type), $template);
+            }
+          }
+        }
+      }
     }
 
     /**

+ 12 - 0
Resources/config/templates.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<container xmlns="http://www.symfony-project.org/schema/dic/services"
+           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+           xsi:schemaLocation="http://www.symfony-project.org/schema/dic/services http://www.symfony-project.org/schema/dic/services/services-1.0.xsd">
+
+    <parameters>
+        <parameter key="base_application.templates.layout">Sonata\BaseApplicationBundle::standard_layout.twig</parameter>
+        <parameter key="base_application.templates.ajax">Sonata\BaseApplicationBundle::ajax_layout.twig</parameter>
+    </parameters>
+
+</container>