@@ -91,10 +91,9 @@ or a ``Closure``), in Symfony, a controller is usually a single method inside
9191a controller object. Controllers are also called *actions *.
9292
9393.. code-block :: php
94- :linenos:
9594
96- // src/Acme/HelloBundle /Controller/HelloController.php
97- namespace Acme\HelloBundle \Controller;
95+ // src/AppBundle /Controller/HelloController.php
96+ namespace AppBundle \Controller;
9897
9998 use Symfony\Component\HttpFoundation\Response;
10099
@@ -151,7 +150,7 @@ to the controller:
151150 # app/config/routing.yml
152151 hello :
153152 path : /hello/{name}
154- defaults : { _controller: AcmeHelloBundle :Hello:index }
153+ defaults : { _controller: AppBundle :Hello:index }
155154
156155 .. code-block :: xml
157156
@@ -163,7 +162,7 @@ to the controller:
163162 http://symfony.com/schema/routing/routing-1.0.xsd" >
164163
165164 <route id =" hello" path =" /hello/{name}" >
166- <default key =" _controller" >AcmeHelloBundle :Hello:index</default >
165+ <default key =" _controller" >AppBundle :Hello:index</default >
167166 </route >
168167 </routes >
169168
@@ -175,7 +174,7 @@ to the controller:
175174
176175 $collection = new RouteCollection();
177176 $collection->add('hello', new Route('/hello/{name}', array(
178- '_controller' => 'AcmeHelloBundle :Hello:index',
177+ '_controller' => 'AppBundle :Hello:index',
179178 )));
180179
181180 return $collection;
@@ -184,10 +183,10 @@ Going to ``/hello/ryan`` now executes the ``HelloController::indexAction()``
184183controller and passes in ``ryan `` for the ``$name `` variable. Creating a
185184"page" means simply creating a controller method and associated route.
186185
187- Notice the syntax used to refer to the controller: ``AcmeHelloBundle :Hello:index ``.
186+ Notice the syntax used to refer to the controller: ``AppBundle :Hello:index ``.
188187Symfony uses a flexible string notation to refer to different controllers.
189188This is the most common syntax and tells Symfony to look for a controller
190- class called ``HelloController `` inside a bundle named ``AcmeHelloBundle ``. The
189+ class called ``HelloController `` inside a bundle named ``AppBundle ``. The
191190method ``indexAction() `` is then executed.
192191
193192For more details on the string format used to reference different controllers,
@@ -202,7 +201,8 @@ see :ref:`controller-string-syntax`.
202201
203202.. tip ::
204203
205- You can learn much more about the routing system in the :doc: `Routing chapter </book/routing >`.
204+ You can learn much more about the routing system in the
205+ :doc: `Routing chapter </book/routing >`.
206206
207207.. index ::
208208 single: Controller; Controller arguments
@@ -212,29 +212,29 @@ see :ref:`controller-string-syntax`.
212212Route Parameters as Controller Arguments
213213~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
214214
215- You already know that the ``_controller `` parameter ``AcmeHelloBundle :Hello:index ``
215+ You already know that the ``_controller `` parameter ``AppBundle :Hello:index ``
216216refers to a ``HelloController::indexAction() `` method that lives inside the
217- ``AcmeHelloBundle `` bundle. What's more interesting is the arguments that are
218- passed to that method::
217+ ``AppBundle `` bundle. What's more interesting is the arguments that are passed
218+ to that method::
219219
220- // src/Acme/HelloBundle /Controller/HelloController.php
221- namespace Acme\HelloBundle \Controller;
220+ // src/AppBundle /Controller/HelloController.php
221+ namespace AppBundle \Controller;
222222
223223 use Symfony\Bundle\FrameworkBundle\Controller\Controller;
224224
225225 class HelloController extends Controller
226226 {
227227 public function indexAction($name)
228228 {
229- // ...
229+ // ...
230230 }
231231 }
232232
233233The controller has a single argument, ``$name ``, which corresponds to the
234234``{name} `` parameter from the matched route (``ryan `` in the example). In
235235fact, when executing your controller, Symfony matches each argument of
236- the controller with a parameter from the matched route. Take the following
237- example:
236+ the controller with a parameter from the matched route by its name . Take the
237+ following example:
238238
239239.. configuration-block ::
240240
@@ -243,7 +243,7 @@ example:
243243 # app/config/routing.yml
244244 hello :
245245 path : /hello/{firstName}/{lastName}
246- defaults : { _controller: AcmeHelloBundle :Hello:index, color: green }
246+ defaults : { _controller: AppBundle :Hello:index, color: green }
247247
248248 .. code-block :: xml
249249
@@ -255,7 +255,7 @@ example:
255255 http://symfony.com/schema/routing/routing-1.0.xsd" >
256256
257257 <route id =" hello" path =" /hello/{firstName}/{lastName}" >
258- <default key =" _controller" >AcmeHelloBundle :Hello:index</default >
258+ <default key =" _controller" >AppBundle :Hello:index</default >
259259 <default key =" color" >green</default >
260260 </route >
261261 </routes >
@@ -268,7 +268,7 @@ example:
268268
269269 $collection = new RouteCollection();
270270 $collection->add('hello', new Route('/hello/{firstName}/{lastName}', array(
271- '_controller' => 'AcmeHelloBundle :Hello:index',
271+ '_controller' => 'AppBundle :Hello:index',
272272 'color' => 'green',
273273 )));
274274
@@ -377,8 +377,8 @@ you can take advantage of several helper methods.
377377Add the ``use `` statement atop the ``Controller `` class and then modify the
378378``HelloController `` to extend it::
379379
380- // src/Acme/HelloBundle /Controller/HelloController.php
381- namespace Acme\HelloBundle \Controller;
380+ // src/AppBundle /Controller/HelloController.php
381+ namespace AppBundle \Controller;
382382
383383 use Symfony\Bundle\FrameworkBundle\Controller\Controller;
384384 use Symfony\Component\HttpFoundation\Response;
@@ -422,15 +422,17 @@ Common Controller Tasks
422422Though a controller can do virtually anything, most controllers will perform
423423the same basic tasks over and over again. These tasks, such as redirecting,
424424forwarding, rendering templates and accessing core services, are very easy
425- to manage in Symfony.
425+ to manage in Symfony when you're extending the base `` Controller `` class .
426426
427427.. index ::
428428 single: Controller; Redirecting
429429
430430Redirecting
431431~~~~~~~~~~~
432432
433- If you want to redirect the user to another page, use the ``redirect() `` method::
433+ If you want to redirect the user to another page, use the
434+ :method: `Symfony\\ Bundle\\ FrameworkBundle\\ Controller\\ Controller::redirect `
435+ method::
434436
435437 public function indexAction()
436438 {
@@ -472,7 +474,7 @@ object that's returned from that controller::
472474
473475 public function indexAction($name)
474476 {
475- $response = $this->forward('AcmeHelloBundle:Hello :fancy', array(
477+ $response = $this->forward('AppBundle:Something :fancy', array(
476478 'name' => $name,
477479 'color' => 'green',
478480 ));
@@ -484,22 +486,22 @@ object that's returned from that controller::
484486
485487Notice that the ``forward() `` method uses the same string representation of
486488the controller used in the routing configuration. In this case, the target
487- controller class will be ``HelloController `` inside some `` AcmeHelloBundle ``.
488- The array passed to the method becomes the arguments on the resulting controller.
489- This same interface is used when embedding controllers into templates (see
490- :ref: `templating-embedding-controller `). The target controller method should
491- look something like the following::
489+ controller class will be ``SomethingController::fancyAction() `` inside the
490+ `` AppBundle ``. The array passed to the method becomes the arguments on the
491+ resulting controller. This same interface is used when embedding controllers
492+ into templates (see :ref: `templating-embedding-controller `). The target
493+ controller method should look something like the following::
492494
493495 public function fancyAction($name, $color)
494496 {
495497 // ... create and return a Response object
496498 }
497499
498- And just like when creating a controller for a route, the order of the arguments
499- to ``fancyAction `` doesn't matter. Symfony matches the index key names
500- (e.g. ``name ``) with the method argument names (e.g. ``$name ``). If you
501- change the order of the arguments, Symfony will still pass the correct
502- value to each variable.
500+ Just like when creating a controller for a route, the order of the arguments of
501+ ``fancyAction `` doesn't matter. Symfony matches the index key names (e.g.
502+ ``name ``) with the method argument names (e.g. ``$name ``). If you change the
503+ order of the arguments, Symfony will still pass the correct value to each
504+ variable.
503505
504506.. tip ::
505507
@@ -512,7 +514,7 @@ value to each variable.
512514 use Symfony\Component\HttpKernel\HttpKernelInterface;
513515
514516 $path = array(
515- '_controller' => 'AcmeHelloBundle:Hello :fancy',
517+ '_controller' => 'AppBundle:Something :fancy',
516518 'name' => $name,
517519 'color' => 'green',
518520 );
@@ -540,57 +542,45 @@ content from the template can be used to create a ``Response`` object::
540542
541543 use Symfony\Component\HttpFoundation\Response;
542544
543- $content = $this->renderView(
544- 'AcmeHelloBundle:Hello:index.html.twig',
545- array('name' => $name)
546- );
545+ $content = $this->renderView('Hello/index.html.twig', array('name' => $name));
547546
548547 return new Response($content);
549548
550549This can even be done in just one step with the ``render() `` method, which
551550returns a ``Response `` object containing the content from the template::
552551
553- return $this->render(
554- 'AcmeHelloBundle:Hello:index.html.twig',
555- array('name' => $name)
556- );
552+ return $this->render('Hello/index.html.twig', array('name' => $name));
557553
558- In both cases, the ``Resources/views/Hello/index.html.twig `` template inside
559- the `` AcmeHelloBundle `` will be rendered.
554+ In both cases, the ``app/ Resources/views/Hello/index.html.twig `` template will
555+ be rendered.
560556
561- The Symfony templating engine is explained in great detail in the
562- :doc: `Templating </book/templating >` chapter.
557+ .. sidebar :: Referencing Templates that Live inside the Bundle
563558
564- .. tip ::
559+ You can also put templates in the ``Resources/views `` directory of a
560+ bundle. You can then reference is with the
561+ ``BundleName:DirectoryName:FileName `` syntax. E.g.
562+ ``AppBundle:Hello:index.html.twig `` would refer to the template located in
563+ ``src/AppBundle/Resources/views/Hello/index.html.twig ``.
565564
566- You can even avoid calling the ``render `` method by using the ``@Template ``
567- annotation. See the
568- :doc: `FrameworkExtraBundle documentation </bundles/SensioFrameworkExtraBundle/annotations/view >`
569- more details.
565+ The Symfony templating engine is explained in great detail in the
566+ :doc: `Templating </book/templating >` chapter.
570567
571568.. tip ::
572569
573570 The ``renderView `` method is a shortcut to direct use of the ``templating ``
574571 service. The ``templating `` service can also be used directly::
575572
576573 $templating = $this->get('templating');
577- $content = $templating->render(
578- 'AcmeHelloBundle:Hello:index.html.twig',
579- array('name' => $name)
580- );
574+ $content = $templating->render('Hello/index.html.twig', array('name' => $name));
581575
582576.. note ::
583577
584578 It is possible to render templates in deeper subdirectories as well, however
585579 be careful to avoid the pitfall of making your directory structure unduly
586580 elaborate::
587581
588- $templating->render(
589- 'AcmeHelloBundle:Hello/Greetings:index.html.twig',
590- array('name' => $name)
591- );
592- // index.html.twig found in Resources/views/Hello/Greetings
593- // is rendered.
582+ $templating->render('Hello/Greetings/index.html.twig', array('name' => $name));
583+ // renders app/Resources/views/Hello/Greetings/index.html.twig
594584
595585.. index ::
596586 single: Controller; Accessing services
0 commit comments