I'm trying to define some parameters inside the AppBundle without success. It's one of my first test on this framework so there may be obvious concept that I misunderstood.
The first problem is the field bundle_version which is not read inside the YAML file. The error returned is the following :
[Symfony\Component\Config\Definition\Exception\InvalidConfigurationException]
The child node "bundle_version" at path "costs" must be configured.
When i comment this line, i get another error :
[Symfony\Component\DependencyInjection\Exception\InvalidArgumentException]
There is no extension able to load the configuration for "costs" (in W:\wamp64\www\test\src\AppBundle\DependencyInjecti
on/../Resources/config\costs.yml). Looked for namespace "costs", found none
src/AppBundle/DependencyInjection/Configuration.php
namespace AppBundle\DependencyInjection;
use Symfony\Component\Config\Definition\ConfigurationInterface;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
class Configuration implements ConfigurationInterface
{
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('costs');
$rootNode->children()
// THIS LINE DON'T WORK AND CAUSE THE 1st PROBLEM
->floatNode('bundle_version')->isRequired()->end()
->arrayNode('shipping')
->children()
->floatNode('es')->isRequired()->end()
->floatNode('it')->isRequired()->end()
->floatNode('uk')->isRequired()->end()
->end()
->end()
->arrayNode('services')
->children()
->floatNode('serviceA')->isRequired()->end()
->floatNode('serviceB')->isRequired()->end()
->end()
->end()
->end();
return $treeBuilder;
}
}
/src/AppBundle/Resources/config.costs.yml
costs:
bundle_version: 1.0 # THIS FIELD IS NOT RECOGNIZED
shipping:
es: 18.00
it: 19.00
uk: 20.00
services:
serviceA: 15.00
serviceB: 20.00
/src/AppBundle/DependencyInjection/AppExtension.php
namespace AppBundle\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
use Symfony\Component\Config\FileLocator;
class AppExtension extends Extension
{
public function load(array $config, ContainerBuilder $container)
{
$loader = new YamlFileLoader(
$container,
new FileLocator(__DIR__.'/../Resources/config')
);
$loader->load('costs.yml');
}
}
The solution is quite simple as i expected ... In /app/config/config.yml there's a predefined "parameters" key and we're supposed to putt our params here if they're not Bundle specific.
So it's just something like :
# /app/config/config.yml
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: services.yml }
# Put parameters here that don't need to change on each machine where the app is deployed
# http://symfony.com/doc/current/best_practices/configuration.html#application- related-configuration
parameters:
locale: fr
my_param: my_value
Then in your controller :
// /src/AppBundle/Controller/DefaultController.php
class DefaultController extends Controller
{
/**
* #Route("/", name="homepage")
*/
public function indexAction(Request $request)
{
$this->getParameter('my_param'); // or $this->getContainer()->getParameter('my_param');
// replace this example code with whatever you need
return $this->render('default/index.html.twig', [
'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
]);
}
}
Hope it helps
Related
Since I'm running out of ideas (and stackoverflow threads): I need an additional app configuration, located under /etc/appname/config.yml (client requirement).
My configuration file:
foo: 'bar'
I'm loading this file within my `app/config/config.yml:
imports:
- { resource: /etc/appname/config.yml }
The error:
There is no extension able to load the configuration for "foo"
I've already implemented a Configuration class:
<?php
namespace AppBundle\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
class Configuration implements ConfigurationInterface
{
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('');
$rootNode
->children()
->scalarNode('foo')->defaultValue('')->end()
->end()
;
return $treeBuilder;
}
}
But it still doesn't work. If I load the config via the load method
public function load(array $configs, ContainerBuilder $container)
{
$loader = new YamlFileLoader(
$container,
new FileLocator('/etc/frsereportergui')
);
$loader->load('config.yml');
}
I get the same error.
Anyone got an idea?
For a few hours now I've been struggling to do the most simple thing you can imagine and it just won't work. I've read tons of stackoverflow questions, read the complete Symfony documentation on configuration files and with every article or other piece of information I read, it gets harder and harder to understand.
Details
I've created my own Bundle. Lets call it HappyBundle. I've put this Bundle in my company's folder. So naturally I've got CompanyHappyBundle.
I want to make a configuration file specifically for this bundle as I want it to be reusable.
As I test i created the following:
# src/Company/HappyBundle/Resources/config/config.yml
company_happy:
import:
path: /tmp
Now, what I want is to be able to use this value in my Controller. I just don't know how. It throws me the following error:
[Symfony\Component\Config\Exception\FileLoaderLoadException]
There is no extension able to load the configuration for "company_happy" (in /home/user/symfony/src/Company/HappyBundle/Resources/config/config.yml).
Looked for namespace "company_happy", found "framework", "security", "twig", "monolog", "swiftmailer", "assetic", "doctrine", "sensio_framework_extra", "debug", "web_profiler", "sensio_distribution" in /home/user/symfony/src/Company/HappyBundle/Resources/config/config.yml (which is being imported from "/home/user/symfony/app/config/config.yml").
Update
In the config.yml I added the following:
#app/config/config.yml
imports:
- { resource: "#CompanyHappyBundle/Resources/config/config.yml" }
I've also made a Configuration class because I read somewhere this was required. I really do think this is alot of work to make just one config file.
namespace Company\HappyBundle\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
class Configuration implements ConfigurationInterface
{
/**
* {#inheritDoc}
*/
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('company_happy');
$rootNode
->children()
->arrayNode('import')
->children()
->scalarNode('attachments_path')->defaultValue('/tmp')->end()
->scalarNode('method')->defaultValue('ALL')->end()
->booleanNode('move_mail')->defaultValue(true)->end()
->booleanNode('mark_read')->defaultValue(true)->end()
->end()
->end()
;
return $treeBuilder;
}
}
What I am actually looking for are the steps and requirements needed to get this working. The thing with symfony is that it has a million ways to do this. The documentation doesn't just give a workflow.
Can someone please help me out?
I have solved my own issue but not without trouble. I'm not at all pleased with Symfony's configuration system.
Step one - Create your config file
Create a file named config.yml in src/<bundle name>/Resources/config/
yourbundle:
param_one: value_one
param_two: value_two
param_three: value_three
param_four: value_four
param_five:
subparam_one: subvalue_one
subparam_two: subvalue_two
subparam_three: subvalue_three
subparam_four: subvalue_four
Step two - Importing your configuration file
Go to app/config/config.yml and add:
#app/config/config.yml
imports:
- { resource: "#YourBundle/Resources/config/config.yml" }
Step three - Create a configuration class
Create a file named Configuration.php in src/<bundle name>/DependencyInjection/
namespace YourBundle\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
class Configuration implements ConfigurationInterface
{
/**
* {#inheritDoc}
*/
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('yourbundle');
$rootNode
->children()
->scalarNode('param_one')->defaultValue('value_one')->end()
->scalarNode('param_two')->defaultValue('value_two')->end()
->scalarNode('param_three')->defaultValue('value_three')->end()
->scalarNode('param_four')->defaultValue('value_four')->end()
->arrayNode('param_five')
->children()
->scalarNode('subparam_one')->defaultValue('subvalue_one')->end()
->scalarNode('subparam_two')->defaultValue('subvalue_two')->end()
->scalarNode('subparam_three')->defaultValue('subvalue_three')->end()
->scalarNode('subparam_four')->defaultValue('subvalue_four')->end()
->end()
->end()
;
return $treeBuilder;
}
}
Step four - Creating an extension
Last but not least, you'll have to create an extension. Create a file <yourbundle>Extension.php in src/<your bundle>/DependencyInjection/
namespace YourBundle\DependencyInjection;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
class YourbundleExtension extends Extension
{
/**
* #var ContainerBuilder
*/
protected $container;
/**
* {#inheritDoc}
*/
public function load(array $configs, ContainerBuilder $container)
{
$this->container = $container;
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
foreach ($config as $key => $value) {
$this->parseNode('yourbundle.'.$key, $value);
}
$container->setParameter('yourbundle', $config);
}
/**
* #param string $name
* #param mixed $value
*
* #throws \Exception
*/
protected function parseNode($name, $value)
{
if (is_string($value)) {
$this->set($name, $value);
return;
}
if (is_integer($value)) {
$this->set($name, $value);
return;
}
if (is_array($value)) {
foreach ($value as $newKey => $newValue) {
$this->parseNode($name.'.'.$newKey, $newValue);
}
return;
}
if (is_bool($value)) {
$this->set($name, $value);
return;
}
throw new \Exception(gettype($value).' not supported');
}
/**
* #param string $key
* #param mixed $value
*/
protected function set($key, $value)
{
$this->container->setParameter($key, $value);
}
}
All these steps are required just to be able to call a configuration parameter specific for your bundle.
If any of you know any way to do this easier, feel free to post an answer or comment.
A few notices:
In config.yml, you are trying to define import as array. It seems like symfony doesn't allow creating array elements in the root of your config, meaning that you have to nest arrays deeper down the tree. So you can not do:
company_happy:
import:
path: /tmp
another_import:
...
I am not sure this is exactly what you were trying to do, but you defined import as array, which makes me assume so.
On the other hand, you can do:
company_happy:
imports:
import:
path: /tmp
another_import:
...
Regarding no extension able to load the configuration error: Make sure your extension file is following naming convetions.It should be called CompanyHappyExtension.php with CompanyHappyExtension class defined inside.
I have created a sample CompanyHappyBundle bundle which is working fine on Symofny 3 (probably works on S2 as well). Feel free to clone/download it :)
The services.yml file is an added bonus, as you will most likely need it anyway.
src/Company/Bundle/HappyBundle/CompanyHappyBundle.php:
<?php
namespace Company\Bundle\HappyBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class CompanyHappyBundle extends Bundle
{
}
src/Company/Bundle/HappyBundle/DependencyInjection/CompanyHappyExtension.php
<?php
namespace Company\Bundle\HappyBundle\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader;
use Symfony\Component\DependencyInjection\Extension\ExtensionInterface;
class CompanyHappyExtension extends Extension implements ExtensionInterface
{
public function load(array $configs, ContainerBuilder $container)
{
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
$configuration = new Configuration();
$options = $this->processConfiguration($configuration, $configs);
// Do something with your options here
}
}
src/Company/Bundle/HappyBundle/DependencyInjection/Configuration.php
<?
namespace Company\Bundle\HappyBundle\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
class Configuration implements ConfigurationInterface
{
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('company_happy');
$rootNode
->children()
->arrayNode('imports')
->prototype('array')
->children()
->scalarNode('path')->defaultValue('/tmp')->end()
->scalarNode('method')->defaultValue('ALL')->end()
->booleanNode('move_mail')->defaultValue(true)->end()
->booleanNode('mark_read')->defaultValue(true)->end()
->end()
->end()
->end()
;
return $treeBuilder;
}
}
src/Company/Bundle/HappyBundle/Resources/config/config.yml
company_happy:
imports:
import:
path: /tmp
src/Company/Bundle/HappyBundle/Resources/config/services.yml
# Define your services here
services:
you're almost done, you just need to configure your Bundle to use your config parameters, take a look at this answer.
Following the advice posted at Loading custom config file for app in symfony2 I stucked into namespace issue.
In \src\AppBundle\DependencyInjection I have two files:
AppExtension.php:
<?php
namespace AppBundle\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
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\Validator\Tests\Fixtures\Entity;
use AppBundle\DependencyInjection\Configuration;
/**
* This is the class that loads and manages your bundle configuration
*/
class AppExtension extends Extension
{
/**
* {#inheritdoc}
*/
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
$container->setParameter('kh', $config['kh']);
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('general.yml'); # another file of yours
}
}
and Configuration.php:
<?
namespace AppBundle\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
class Configuration implements ConfigurationInterface
{
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('kh');
$rootNode
->children()
->arrayNode('tags')
->prototype('array')
->children()
->scalarNode('name')->isRequired()->end();
->scalarNode('role')->isRequired()->end();
->scalarNode('priority')->isRequired()->end();
->scalarNode('label')->isRequired()->end();
->end();
->end();
->end();
return $treeBuilder;
}
}
It seems that I make some kind of mistake naming the files as executing:
php app/console cache:clear --env=prod
results in:
PHP Fatal error: Class 'AppBundle\DependencyInjection\Configuration' not found in /var/www/dev.investmentopportunities.pl/src/AppBundle/DependencyInjection/AppExtension.php on line 22
[2015-08-02 10:39:36] php.EMERGENCY: Fatal Error: Class 'AppBundle\DependencyInjection\Configuration' not found {"type":1,"file":"/var/www/dev.investmentopportunities.pl/src/AppBundle/DependencyInjection/AppExtension.php","line":22,"level":6143,"stack":[]}
Unluckily I have a problem with finding the error on my own. I have tried to rename files but still the error occurs. Could you please advice what am I doing wrong?
UPDATE 1:
As sugested by #San Thapa I have tried also to remove "use" command. This results in:
PHP Fatal error: Class 'AppBundle\DependencyInjection\Configuration' not found in /var/www/dev.investmentopportunities.pl/src/AppBundle/DependencyInjection/AppExtension.php on line 21
[2015-08-02 12:05:27] php.EMERGENCY: Fatal Error: Class 'AppBundle\DependencyInjection\Configuration' not found {"type":1,"file":"/var/www/dev.investmentopportunities.pl/src/AppBundle/DependencyInjection/AppExtension.php","line":21,"level":6143,"stack":[]}
[Symfony\Component\Debug\Exception\ClassNotFoundException]
Attempted to load class "Configuration" from namespace "AppBundle\Dependenc
yInjection".
Did you forget a "use" statement for e.g. "Symfony\Bundle\TwigBundle\Depend
encyInjection\Configuration", "Symfony\Bundle\DebugBundle\DependencyInjecti
on\Configuration", "Symfony\Bundle\WebProfilerBundle\DependencyInjection\Co
nfiguration", "Symfony\Bundle\FrameworkBundle\Tests\Functional\Bundle\TestB
undle\DependencyInjection\Configuration", "Symfony\Bundle\FrameworkBundle\D
ependencyInjection\Configuration", "Genemu\Bundle\FormBundle\DependencyInje
ction\Configuration", "Doctrine\ORM\Configuration", "Doctrine\DBAL\Configur
ation", "Doctrine\Bundle\DoctrineCacheBundle\DependencyInjection\Configurat
ion", "Symfony\Bundle\SwiftmailerBundle\DependencyInjection\Configuration",
"Symfony\Bundle\MonologBundle\DependencyInjection\Configuration", "Symfony
\Bundle\AsseticBundle\DependencyInjection\Configuration", "Sensio\Bundle\Fr
ameworkExtraBundle\DependencyInjection\Configuration", "PUGX\AutocompleterB
undle\DependencyInjection\Configuration", "Knp\Bundle\PaginatorBundle\Depen
dencyInjection\Configuration", "FOS\UserBundle\DependencyInjection\Configur
ation" or "Doctrine\Bundle\DoctrineBundle\DependencyInjection\Configuration
"?
What seems a bit strange acessing the webpage from browser does not result in any error.
Just added to first line of Configuration.php:
<?php
and also remove semicolons:
$rootNode
->children()
->arrayNode('tags')
->prototype('array')
->children()
->scalarNode('name')->isRequired()->end()
->scalarNode('role')->isRequired()->end()
->scalarNode('priority')->isRequired()->end()
->scalarNode('label')->isRequired()->end()
->end()
->end()
->end();
I'm not sure about structure... Maybe you forgot add one more end()...
I'm trying to write a semantic configuration of the bundle in Symfony2. I have prepared a configuration file using YAML (spu.yml):
spu:
modules:
spu-module:
reuqires: []
path: modules/spu-module.js
Then I'm loading it in Extension file (DependencyInjection/spuExtension.php):
namespace Gig\SpuBundle\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader;
class spuExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration( $configuration, $configs );
$loader = new Loader\YamlFileLoader( $container, new FileLocator( __DIR__ . '/../Resources/config' ) );
$loader->load( 'services.yml' );
$loader->load( 'spu.yml' );
}
}
And configuration class ()DependencyInjection/Configuration.php) for this extension is:
namespace Gig\SpuBundle\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
class Configuration implements ConfigurationInterface
{
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root( 'spu' );
$rootNode
->children()
->arrayNode('modules')
->isRequired()
->prototype('array')
->end()
->end();
return $treeBuilder;
}
}
When validating the config I get an error:
[Symfony\Component\Config\Definition\Exception\InvalidConfigurationException]
The child node "modules" at path "spu" must be configured.
What am I doing wrong?
You must include this in your main app/config/config.yml file
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: spu.yml }
If you want to have default parameters, set them in DependencyInjection/Configuration.php
This can be something like this.
$rootNode
->children()
->arrayNode('modules')
->isRequired()
->addDefaultsIfNotSet()
->prototype('array')
->children()
->arrayNode('reuqires')->end()
->scalarNode('path')->defaultValue('modules/spu-module.js')->end()
->end()
->end()
->end()
->end();
The best way to do this is to let the users define the configuration for your bundle in the config.yml file. There is no need for a special file.
You can keep the configuration which you have in your Configuration class but you will have to modify your spuExtension class.
The way Symfony works you will have to read the values from the config.yml for your bundle in the spuExtension class and then set them as parameters. Then you will have easy access to these values by using the container's getParameter method.
This is how your config.yml will look
spu:
modules:
spu-module:
reuqires: []
path: modules/spu-module.js
Then in your spuExtension class you can get these values specified by doing:
class spuExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration( $configuration, $configs );
$loader = new Loader\YamlFileLoader( $container, new FileLocator( __DIR__ . '/../Resources/config' ) );
$loader->load( 'services.yml' );
$container->setParameter('modules', $configs[0]);
}
}
This will make it easy for you to use the container in an controller to get a parameter.
The $configs variable in the spuExtension will contain all the configuration that is listed under your root. Which in this case is spu.
The way Symfony works you first have to load the configuration in your bundle's extension class and then set this as a parameter, this seems redundant but it's a best practice and it was intended to work like this.
Ok, I did it different way.
public function load(array $configs, ContainerBuilder $container)
{
$loader = new Loader\YamlFileLoader( $container, new FileLocator( __DIR__ . '/../Resources/config' ) );
$loader->load( 'services.yml' );
$loader->load( 'spu.yml' );
$spuConfig = Yaml::parse(__DIR__ . '/../Resources/config/spu.yml');
$configs = array_merge($configs, $spuConfig);
$configuration = new Configuration();
$config = $this->processConfiguration( $configuration, $configs );
}
And now I'm getting what I wanted. I can validate params in Configuration class.
I'm trying to expose the semantic configuration within a bundle in Symfony 2.0 but I'm having trouble getting the defaultValue to work in the NodeDefinition class. I generated an empty bundle and created the necessary files for the Configuration to work and I am able to get the config value, but I want to set a defaultValue to configuration item. I use the defaultValue() method and remove the configuration item from my config.yml and then it shows up an empty array? Can anyone explain how the defaultValue() actually works, am I missing something?
<?php
// ./DependencyInjection/Configuration.php
namespace Test\Bundle\TestBundle\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
class Configuration implements ConfigurationInterface
{
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('test_bundle');
$rootNode
->children()
->scalarNode('foo')->defaultValue('bar')->end()
->end();
return $treeBuilder;
}
}
-
<?php
// ./DependencyInjection/TestBundleExtension.php
namespace Test\Bundle\TestBundle\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader;
class TestBundleExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
var_dump($configs); // empty array
$loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.xml');
}
}
So from the above Configuration class surely when the config item 'test_bundle.foo' is missing, it's value will be set to 'bar'... yes? Well that's what I thought but it doesn't.
Your root node is an array node. By default, if you dont set a key, default value is not applied. 2 examples on how to get your default value working:
Set the value as null:
# in the config.yml
test_bundle:
foo: ~
Tell your root node to use default values if not set:
// in your Configuration.php
$rootNode
->addDefaultsIfNotSet()
->children()
->scalarNode('foo')->defaultValue('bar')->end()
->end();
# in the config.yml
test_bundle: ~