-
-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Documented how to get container parameters as a service #9181
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 2 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -296,7 +296,7 @@ made. To do that, you create a new class:: | |
->addPart( | ||
'Someone just updated the site. We told them: '.$happyMessage | ||
); | ||
|
||
return $this->mailer->send($message) > 0; | ||
} | ||
} | ||
|
@@ -317,7 +317,7 @@ you can type-hint the new ``SiteUpdateManager`` class and use it:: | |
if ($siteUpdateManager->notifyOfSiteUpdate()) { | ||
$this->addFlash('success', 'Notification mail was sent successfully.'); | ||
} | ||
|
||
// ... | ||
} | ||
|
||
|
@@ -690,6 +690,40 @@ argument for *any* service defined in this file! You can bind arguments by name | |
The ``bind`` config can be also be applied to specific services or when loading many | ||
services at once (i.e. :ref:`service-psr4-loader`). | ||
|
||
Getting Container Parameters as a Service | ||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
|
||
.. versionadded:: 4.1 | ||
The ``ContainerBagInterface`` class was introduced in Symfony 4.1. | ||
|
||
If some service or controller needs lots of container parameters, there's an | ||
easier alternative to binding all of them. Type-hint an argument with the | ||
:class:`Symfony\\Component\\DependencyInjection\\ParameterBag\\ContainerBagInterface` | ||
class to inject all container parameters in a single object similar to the | ||
:class:`Symfony\\Component\\DependencyInjection\\ParameterBag\\ParameterBag` | ||
objects used in other parts of the framework:: | ||
|
||
// src/Service/MessageGenerator.php | ||
// ... | ||
|
||
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface; | ||
|
||
class MessageGenerator | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe a more concrete example with a Mailer class using a There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I like the idea of giving a name to the parameter. Thanks! |
||
{ | ||
private $params; | ||
|
||
public function __construct(ContainerBagInterface $params) | ||
{ | ||
$this->params = $params; | ||
} | ||
|
||
public function someMethod() | ||
{ | ||
$parameterValue = $this->params->get('parameter_name'); | ||
// ... | ||
} | ||
} | ||
|
||
.. _services-autowire: | ||
|
||
The autowire Option | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
An example of the services.yml/xml would be nice also. How do I configure which services are inside the ContainerBag?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In the ContainerBag there are no services, just all container parameters. About the YAML/XML config ... since we're promoting autowiring and type-hint injection, I prefer to keep consistent with the rest of the docs.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I know, but how do I say that inside this containerBag there is a param called 'parameter_name' (your example)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@jordisala1991 I had the same question as you, read the docs again and now my understanding is that you get each and every available parameters in that bag
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've reworded everything. Hopefully it's easier to understand now. Thanks!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Now I get it! Thank you @javiereguiluz