Important

You are browsing the documentation for version 3.1 of OroCommerce, OroCRM and OroPlatform, which is no longer maintained. Read version 5.1 (the latest LTS version) of the Oro documentation to get up-to-date information.

See our Release Process documentation for more information on the currently supported and upcoming releases.

System Configuration

With the OroConfigBundle you can define configuration settings in different scopes. These settings can be organized and visualized in different configuration trees.

Managing Configuration Settings

To define your own configuration settings in a bundle, you use the Oro\Bundle\ConfigBundle\DependencyInjection\SettingsBuilder in the Configuration class:

 1// src/Acme/DemoBundle/DependencyInjection/Configuration.php
 2namespace Acme\DemoBundle\DependencyInjection;
 3
 4use Oro\Bundle\ConfigBundle\DependencyInjection\SettingsBuilder;
 5use Symfony\Component\Config\Definition\Builder\TreeBuilder;
 6use Symfony\Component\Config\Definition\ConfigurationInterface;
 7
 8class Configuration implements ConfigurationInterface
 9{
10    public function getConfigTreeBuilder()
11    {
12        $treeBuilder = new TreeBuilder();
13        $rootNode = $treeBuilder->root('acme_demo');
14
15        // provide your regular Symfony configuration here
16
17        SettingsBuilder::append($rootNode, [
18            'foo' => [
19                'value' => true,
20                'type' => 'boolean',
21            ],
22            'bar' => [
23                'value' => 10,
24            ],
25        ]);
26
27        return $treeBuilder;
28    }
29}

The SettingsBuilder class is a helper class that adds additional nodes to the configuration tree. It expects the root node of the tree to which the new nodes are appended. The second argument is an array of configuration settings. The example above adds two options: foo and bar. Each option can get a default value and a type (one of scalar, boolean or array). The default type if none is specified is scalar.

See also

If you are not familiar with creating Configuration classes, read about semantic configurations in the official documentation.

Creating Configuration Forms

To allow a user to modify their configuration settings, you have to create a form that is presented to the user. The form configuration is done in the system_configuration.yml file of the bundle.

Fields

For each option, define a field under fields key:

 1# Acme/DemoBundle/Resources/config/oro/system_configuration.yml
 2system_configuration:
 3    fields:
 4        foo:
 5            type: checkbox
 6            options:
 7                label: "A label"
 8            priority: 10
 9        bar:
10            type: text
11            priority: 20
12            tooltip: "A tooltip"

The only required field is type which can refer to any valid form type. Other supported fields are:

Field

Description

type

The form type (required)

options

Additional options that are passed to the form type

tooltip

A tooltip containing additional information

acl_resource

ACL resource the user needs to be allowed to change the option

priority

Optional field display order

Accessing Configuration Values

In Controllers

To retrieve configuration values inside a controller, you have to use the oro_config.user service which is an instance of Oro\ConfigBundle\Config\UserConfigManager. Use its get() method to retrieve the value of a setting:

 1// src/Acme/DemoBundle/Controller/DemoController.php
 2namespace Acme\DemoBundle\Controller;
 3
 4use Symfony\Bundle\FrameworkBundle\Controller\Controller;
 5
 6class DemoController extends Controller
 7{
 8    public function demoAction()
 9    {
10        $config = $this->get('oro_config.user');
11        $foo = $config->get('acme_demo.foo');
12
13        // ...
14    }
15}

Note

The actual setting name is to be prefixed by the bundle alias (here acme_demo for AcmeDemoBundle).

In Templates

In a Twig template, use the oro_config_value() helper to retrieve the value of a configuration option:

1{# setting becomes the value the user configured or true if they didn't #}
2{% set setting = oro_config_value('acme_demo.foo') %}

Note

The actual setting name is to be prefixed by the bundle alias (here acme_demo for AcmeDemoBundle).