Skip to content

Commit 44f8496

Browse files
committed
feature #5689 [DI] Add some documentation for the deprecation feature (Taluu)
This PR was merged into the 2.8 branch. Discussion ---------- [DI] Add some documentation for the deprecation feature | Q | A | ------------- | --- | Doc fix? | no | New docs? | yes symfony/symfony#15491 | Applies to | 2.8+ | Fixed tickets | ~ Document the deprecation feature I introduced in symfony/symfony#15491 Commits ------- 1e1b036 [DI] Add some documentation for the deprecation feature
2 parents f8c9ce3 + 1e1b036 commit 44f8496

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

components/dependency_injection/advanced.rst

+60
Original file line numberDiff line numberDiff line change
@@ -218,3 +218,63 @@ You can change the inner service name if you want to:
218218
->addArgument(new Reference('bar.wooz'))
219219
->setPublic(false)
220220
->setDecoratedService('foo', 'bar.wooz');
221+
222+
Deprecating Services
223+
--------------------
224+
.. versionadded:: 2.8
225+
The ``deprecated`` setting was introduced in Symfony 2.8
226+
227+
Once you have decided to deprecate the use of a service (because it is outdated
228+
or you decided not to use and maintain it anymore), you can deprecate its
229+
definition:
230+
231+
.. configuration-block::
232+
233+
.. code-block:: yaml
234+
235+
bar:
236+
class: stdClass
237+
deprecated: The "%service_id%" service is deprecated since 2.8 and will be removed in 3.0.
238+
239+
.. code-block:: xml
240+
241+
<service id="bar" class="stdClass">
242+
<deprecated>The "%service_id%" service is deprecated since 2.8 and will be removed in 3.0.</deprecated>
243+
</service>
244+
245+
.. code-block:: php
246+
247+
$container
248+
->register('bar', 'stdClass')
249+
->setDeprecated(true, 'The "%service_id%" service is deprecated since 2.8 and will be removed in 3.0.');
250+
251+
Now, every time a service is created using this deprecated definition, a
252+
deprecation warning will be triggered, advising you to stop or to change your
253+
uses of that service.
254+
255+
The message is actually a message template, which will replace occurrences
256+
of the ``%service_id%`` by the service's id. You **must** have at least one
257+
occurrence of the ``%service_id%`` placeholder in your template.
258+
259+
.. note::
260+
261+
The deprecation message is optional. If not set, Symfony will show a default
262+
message ``The "%service_id%" service is deprecated. You should stop using it,
263+
as it will soon be removed.``.
264+
265+
.. tip::
266+
267+
It is strongly recommended that you fill the message template, to avoid a
268+
message that could be too generic such as the default one. A good message
269+
informs when this service was deprecated, and until when it will be
270+
maintained (look at the examples above).
271+
272+
For service decorators (see above), if the definition does not modify the
273+
deprecated status, it will inherit the status from the definition that is
274+
decorated.
275+
276+
.. caution::
277+
278+
The ability to "un-deprecate" a service is possible only when declaring the
279+
definition in PHP.
280+

0 commit comments

Comments
 (0)