How to Inject Values Based on Complex Expressions

The service container also supports an “expression” that allows you to inject very specific values into a service.

For example, suppose you have a service (not shown here), called App\Mail\MailerConfiguration, which has a getMailerMethod() method on it. This returns a string - like sendmail based on some configuration.

Suppose that you want to pass the result of this method as a constructor argument to another service: App\Mailer. One way to do this is with an expression:

To learn more about the expression language syntax, see The Expression Syntax.

In this context, you have access to 2 functions:

service

Returns a given service (see the example above).

parameter

Returns a specific parameter value (syntax is like service).

You also have access to the Symfony\Component\DependencyInjection\Container via a container variable. Here’s another example:

Expressions can be used in arguments, properties, as arguments with configurator and as arguments to calls (method calls).