Global navigation

   Documentation Center
   eZ Studio & eZ Platform
     User Manual
     Technical Manual
     Glossary
   eZ Publish 4.x / legacy

 
eZ Publish (5.x)

eZ Publish 5.x | For eZ Platform & eZ Studio topics see Technical manual and User manual, for eZ Publish 4.x and Legacy topics see eZ Publish legacy

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: adding extract
Excerpt
Tip

The following recipe is valid for any type of settings supported by Symfony framework.

 

Table of Contents

Use case

Usually, you develop your website using one or several custom bundles as this is a best practice. However, dealing with core bundles semantic configuration can be a bit tedious if you maintain it in the main ezpublish/config/ezpublish.yml configuration file.

This recipe will show you how to import configuration from a bundle the manual way and the implicit way.

The manual way

This is the simplest way of doing and it has the advantage to be explicit. The idea is to use the imports statement in your main ezpublish.yml:

Code Block
titleezpublish/config/ezpublish.yml
imports:
    # Let's import our template selection rules that reside in our custom bundle.
    # MyCustomBundle is the actual bundle name
    - {resource: @MyCustomBundle"@AcmeTestBundle/Resources/config/templates_rules.yml"}
 
ezpublish:
    # ...
Code Block
titletemplates_rules.yml, placed under Resources/config folder in MyCustomBundleAcmeTestBundle
# Here I need to reproduce the right configuration tree.
# It will be merged with the main one
ezpublish:
    system:
        my_siteaccess:
            ezpage:
                layouts:
                    2ZonesLayout1:
                        name: "2 zones (layout 1)"
                        template: "AcmeTestBundle:zone:2zoneslayout1.html.twig"
    
            location_view:
                full:
                    article_test:
                        template: "AcmeTestBundle:full:article_test.html.twig"
                        match:
                            Id\Location: [144,149]
                    another_test:
                        template: "::another_test.html.twig"
                        match:
                            Id\Content: 142
    
            block_view:
                campaign:
                    template: "AcmeTestBundle:block:campaign.html.twig"
                    match:
                        Type: "Campaign"

...

Tip
titleTip

If you want to import configuration for development use only, you can do so in your ezpublish_dev.yml (wink)

The implicit way

Info

Compatible with eZ Publish 5.1+ / Symfony 2.2+ as it uses Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface which is available as of Symfony 2.2 (more info on Symfony cookbook).

The following example will show you how to implicitly load settings to be configure eZ Publish kernel. Note that this is also valid for any bundle !

We assume here that you're aware of service container extensions.

Code Block
languagephp
titleAcme/TestBundle/DependencyInjection/AcmeTestExtension
<?php
 
namespace Acme\TestBundle\DependencyInjection;
 
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\Resource\FileResource;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader;
use Symfony\Component\Yaml\Yaml;
 
/**
 * This is the class that loads and manages your bundle configuration
 *
 * To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html}
 */
class AcmeTestExtension extends Extension implements PrependExtensionInterface
{
    // ...
 
    /**
     * Allow an extension to prepend the extension configurations.
     * Here we will load our template selection rules.

     *
     * @param ContainerBuilder $container
     */
    public function prepend( ContainerBuilder $container )
    {
        // Loading our YAML file containing our template rules
        $configFile = __DIR__ . '/../Resources/config/template_rules.yml';
        $config = Yaml::parse( file_get_contents( $configFile ) );
        // We explicitly prepend loaded configuration for "ezpublish" namespace.
        // So it will be placed under the "ezpublish" configuration key, like in ezpublish.yml.
        $container->prependExtensionConfig( 'ezpublish', $config );
        $container->addResource( new FileResource( $configFile ) );
    }
}

Code Block
titleAcmeTestBundle/Resources/config/template_rules.yml
# We explicitly prepend config for "ezpublish" namespace in service container extension, 
# so no need to repeat it here
system:
    ezdemo_frontend_group:
        ezpage:
            layouts:
                2ZonesLayout1:
                    name: "2 zones (layout 1)"
                    template: "AcmeTestBundle:zone:2zoneslayout1.html.twig"
 
        location_view:
            full:
                article_test:
                    template: "AcmeTestBundle:full:article_test.html.twig"
                    match:
                        Id\Location: 144
                another_test:
                    template: "::another_test.html.twig"
                    match:
                        Id\Content: 142
 
        block_view:
            campaign:
                template: "AcmeTestBundle:block:campaign.html.twig"
                match:
                    Type: "Campaign"


Info
titleRegarding performance

Service container extensions are called only when the container is being compiled, so there is nothing to worry about regarding performance.

Tip

Configuration loaded this way will be overridden by the main ezpublish.yml file.