@@ -116,19 +116,30 @@ For more information on routing, see :doc:`/routing`.
116116.. index ::
117117 single: Controller; Base controller class
118118
119- The Base Controller Class & Services
120- ------------------------------------
119+ .. _ anchor-name :
120+ :ref:`The Base Controller Classes & Services <the-base-controller-class-services>`
121121
122- For convenience, Symfony comes with an optional base
123- :class: `Symfony\\ Bundle\\ FrameworkBundle\\ Controller\\ Controller ` class.
124- If you extend it, this won't change anything about how your controller
125- works, but you'll get access to a number of **helper methods ** and the
126- **service container ** (see :ref: `controller-accessing-services `): an
122+ The Base Controller Classes & Services
123+ --------------------------------------
124+
125+ For convenience, Symfony comes with two optional base
126+ :class: `Symfony\\ Bundle\\ FrameworkBundle\\ Controller\\ Controller ` and
127+ :class: `Symfony\\ Bundle\\ FrameworkBundle\\ Controller\\ AbstractController `
128+ classes.
129+ If you extend one or the other, this won't change anything about how your
130+ controller works, but you'll get access to a number of **helper methods **.
131+
132+ The base ``Controller `` also allows you to access the **service container ** (see :ref: `controller-accessing-services `): an
127133array-like object that gives you access to every useful object in the
128134system. These useful objects are called **services **, and Symfony ships
129135with a service object that can render Twig templates, another that can
130136log messages and many more.
131137
138+ On the other hand, the ``AbstractController `` prevents you from accessing the
139+ **service container **. When you need an external dependency, this forces you to
140+ write a code more robust as you have to explicitly define your dependencies by
141+ using :doc: `the controller as a service </controller/service >`.
142+
132143Add the ``use `` statement atop the ``Controller `` class and then modify
133144``LuckyController `` to extend it::
134145
@@ -144,7 +155,7 @@ Add the ``use`` statement atop the ``Controller`` class and then modify
144155
145156Helper methods are just shortcuts to using core Symfony functionality
146157that's available to you with or without the use of the base
147- `` Controller `` class . A great way to see the core functionality in
158+ controller classes . A great way to see the core functionality in
148159action is to look in the
149160:class: `Symfony\\ Bundle\\ FrameworkBundle\\ Controller\\ Controller ` class.
150161
@@ -241,10 +252,9 @@ are used for rendering templates, sending emails, querying the database and
241252any other "work" you can think of. When you install a new bundle, it probably
242253brings in even *more * services.
243254
244- When extending the base controller class, you can access any Symfony service
255+ When extending the base `` Controller `` class, you can access any Symfony service
245256via the :method: `Symfony\\ Bundle\\ FrameworkBundle\\ Controller\\ Controller::get `
246- method of the ``Controller `` class. Here are several common services you might
247- need::
257+ method. Here are several common services you might need::
248258
249259 $templating = $this->get('templating');
250260
@@ -279,7 +289,8 @@ Managing Errors and 404 Pages
279289
280290When things are not found, you should play well with the HTTP protocol and
281291return a 404 response. To do this, you'll throw a special type of exception.
282- If you're extending the base ``Controller `` class, do the following::
292+ If you're extending the base ``Controller `` or the base ``AbstractController ``
293+ class, do the following::
283294
284295 public function indexAction()
285296 {
0 commit comments