New in Symfony 5.3: Configure Multiple Environments in a Single File

Contributed by Nicolas Grekas in #40214 and #40782.

Symfony defines different configuration environments so you can change your application behavior depending on where it’s run (e.g. locally in your development machine, in the production server, etc.) The options applied to bundles/packages in all environments are defined in config/packages/ and the specific options of each environment are defined in config/packages/<environment>/. This works well, but it’s cumbersome when the differences among environments are minimal, because you need to create/maintain another config file just to change a few config options. That’s why in Symfony 5.3 you can also define options for different environments in a single file. The exact syntax to use depends on the format of the config file. In YAML config files, use the when@... special key: 1 2 3 4 5 6 7 8 9 10 11 12 13 14# config/packages/webpack_encore.yaml webpack_encore:

...

output_path: &#39;%kernel.project_dir%/public/build&#39;
strict_mode: true
cache: false

when@prod: webpack_encore: cache: true

when@test: webpack_encore: strict_mode: false

In XML config, wrap the config in the new <when> tag: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19<!-- config/packages/webpack_encore.xml --> <?xml version="1.0" encoding="UTF-8" ?> <container xmlns="..."> <webpack-encore:config> <!-- ... --> </webpack-encore:config>

    &lt;when env=&quot;prod&quot;&gt;
        &lt;webpack-encore:config&gt;
            &lt;!-- ... --&gt;
        &lt;/webpack-encore:config&gt;
    &lt;/when&gt;

    &lt;when env=&quot;test&quot;&gt;
        &lt;webpack-encore:config&gt;
            &lt;!-- ... --&gt;
        &lt;/webpack-encore:config&gt;
    &lt;/when&gt;
&lt;/container&gt;

In PHP config files, use the new env() method to check in which environment is the application running: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15// config/packages/webpack_encore.php use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;

return static function (FrameworkConfig $framework, ContainerConfigurator $container) { // ...

if (&#39;prod&#39; === $container-&gt;env()) {
    // ...
}

if (&#39;test&#39; === $container-&gt;env()) {
    $framework-&gt;test(true);
    $framework-&gt;session()-&gt;storageFactoryId(&#39;session.storage.mock_file&#39;);
}

};

This syntax also works to define routes and services only in some environments. You can even combine all in a single file to configure some package and create services but only for some environments: 1 2 3 4 5 6 7 8 9 10 11framework: secret: '%env(APP_SECRET)%'

when@dev: services: App\SomeServiceForDev: ~

when@test: framework: test: true

...

The traditional way of using a config file per environment will keep working in the future, but we encourage you to give this new feature a try to reduce the number of config files to maintain. Lastly, classes can now use PHP attributes to tell that they should only be registered as services in some environments: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16use Symfony\Component\DependencyInjection\Attribute\When;

[When(env: 'dev')]

class SomeClass { // ... }

// you can apply more than one attribute to the same class:

[When(env: 'dev')]

[When(env: 'test')]

class AnotherClass { // ... }

                Sponsor the Symfony project.

http://feedproxy.google.com/~r/symfony/blog/~3/wnRkgGE-l2E/new-in-symfony-5-3-configure-multiple-environments-in-a-single-file

Établi 4y | 7 mai 2021, 07:20:06


Connectez-vous pour ajouter un commentaire

Autres messages de ce groupe

A Week of Symfony #972 (August 11–17, 2025)

This week, development activity mostly focused on dealing with the deprecation of sleep/wakeup methods in PHP 8.5 and their replacement by serialize/unserialize methods. In addition, we published more

17 août 2025, 08:30:06 | Symfony
Let’s build the Symfony AI ecosystem together

It’s been only in July that we published symfony/ai and kicked off our AI initiative, but the repository has been busy since day one. Over 500 stars, more than 200 pull requests & issues, trending

16 août 2025, 09:30:03 | Symfony
SymfonyCon Amsterdam 2025:   Unconference Track at SymfonyCon Amsterdam 2025

🎤 Take the stage at SymfonyCon Amsterdam 2025, on your own terms!

The Unconference track is back and more dynamic than ever!

This unique, participant-driven format invites attendees to shape

12 août 2025, 12:40:20 | Symfony
A Week of Symfony #971 (August 4–10, 2025)

This week, Symfony completed the migration to PHPUnit 12 in the 7.4 branch, which required many changes during the past weeks, such as replacing annotations with attributes. In addition, we updated th

10 août 2025, 09:40:09 | Symfony
SymfonyCon Amsterdam 2025:  Join the Symfony Hackathon:  Collaborate, Contribute, Create

🧑‍💻HACKDAY IS COMING!

Get ready to code, collaborate, and contribute, Symfony Hackday is back!

Join us in Amsterdam on Saturday, November 29th, for a hands-on hackathon designed to bring the

6 août 2025, 10:40:04 | Symfony
A Week of Symfony #970 (July 28 – August 3, 2025)

This week, Symfony released the maintenance versions 6.4.24, 7.2.9, and 7.3.2. Meanwhile, we began deprecating the XML configuration format in some components, enhanced the YAML configuration format t

3 août 2025, 08:30:03 | Symfony
Symfony 6.4.24 released

Symfony 6.4.24 has just been released. Read the Symfony upgrade guide to learn more about upgrading Symfony and use the SymfonyInsight upgrade reports to detect the code you will need to change in you

31 juil. 2025, 13:10:32 | Symfony