@@ -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
10BC0
code>+ '_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;
@@ -427,15 +427,17 @@ Common Controller Tasks
427427Though a controller can do virtually anything, most controllers will perform
428428the same basic tasks over and over again. These tasks, such as redirecting,
429429forwarding, rendering templates and accessing core services, are very easy
430- to manage in Symfony.
430+ to manage in Symfony when you're extending the base `` Controller `` class .
431431
432432.. index ::
433433 single: Controller; Redirecting
434434
435435Redirecting
436436~~~~~~~~~~~
437437
438- If you want to redirect the user to another page, use the ``redirect() `` method::
438+ If you want to redirect the user to another page, use the
439+ :method: `Symfony\\ Bundle\\ FrameworkBundle\\ Controller\\ Controller::redirect `
440+ method::
439441
440442 public function indexAction()
441443 {
@@ -477,7 +479,7 @@ object that's returned from that controller::
477479
478480 public function indexAction($name)
479481 {
480- $response = $this->forward('AcmeHelloBundle:Hello :fancy', array(
482+ $response = $this->forward('AppBundle:Something :fancy', array(
481483 'name' => $name,
482484 'color' => 'green',
483485 ));
@@ -489,22 +491,22 @@ object that's returned from that controller::
489491
490492Notice that the ``forward() `` method uses the same string representation of
491493the controller used in the routing configuration. In this case, the target
492- controller class will be ``HelloController `` inside some `` AcmeHelloBundle ``.
493- The array passed to the method becomes the arguments on the resulting controller.
494- This same interface is used when embedding controllers into templates (see
495- :ref: `templating-embedding-controller `). The target controller method should
496- look something like the following::
494+ controller class will be ``SomethingController::fancyAction() `` inside the
495+ `` AppBundle ``. The array passed to the method becomes the arguments on the
496+ resulting controller. This same interface is used when embedding controllers
497+ into templates (see :ref: `templating-embedding-controller `). The target
498+ controller method should look something like the following::
497499
498500 public function fancyAction($name, $color)
499501 {
500502 // ... create and return a Response object
501503 }
502504
503- And just like when creating a controller for a route, the order of the arguments
504- to ``fancyAction `` doesn't matter. Symfony matches the index key names
505- (e.g. ``name ``) with the method argument names (e.g. ``$name ``). If you
506- change the order of the arguments, Symfony will still pass the correct
507- value to each variable.
505+ Just like when creating a controller for a route, the order of the arguments of
506+ ``fancyAction `` doesn't matter. Symfony matches the index key names (e.g.
507+ ``name ``) with the method argument names (e.g. ``$name ``). If you change the
508+ order of the arguments, Symfony will still pass the correct value to each
509+ variable.
508510
509511.. tip ::
510512
@@ -517,7 +519,7 @@ value to each variable.
517519 use Symfony\Component\HttpKernel\HttpKernelInterface;
518520
519521 $path = array(
520- '_controller' => 'AcmeHelloBundle:Hello :fancy',
522+ '_controller' => 'AppBundle:Something :fancy',
521523 'name' => $name,
522524 'color' => 'green',
523525 );
@@ -545,57 +547,45 @@ content from the template can be used to create a ``Response`` object::
545547
546548 use Symfony\Component\HttpFoundation\Response;
547549
548- $content = $this->renderView(
549- 'AcmeHelloBundle:Hello:index.html.twig',
550- array('name' => $name)
551- );
550+ $content = $this->renderView('Hello/index.html.twig', array('name' => $name));
552551
553552 return new Response($content);
554553
555554This can even be done in just one step with the ``render() `` method, which
556555returns a ``Response `` object containing the content from the template::
557556
558- return $this->render(
559- 'AcmeHelloBundle:Hello:index.html.twig',
560- array('name' => $name)
561- );
557+ return $this->render('Hello/index.html.twig', array('name' => $name));
562558
563- In both cases, the ``Resources/views/Hello/index.html.twig `` template inside
564- the `` AcmeHelloBundle `` will be rendered.
559+ In both cases, the ``app/ Resources/views/Hello/index.html.twig `` template will
560+ be rendered.
565561
566- The Symfony templating engine is explained in great detail in the
567- :doc: `Templating </book/templating >` chapter.
562+ .. sidebar :: Referencing Templates that Live inside the Bundle
568563
569- .. tip ::
564+ You can also put templates in the ``Resources/views `` directory of a
565+ bundle. You can then reference is with the
566+ ``BundleName:DirectoryName:FileName `` syntax. E.g.
567+ ``AppBundle:Hello:index.html.twig `` would refer to the template located in
568+ ``src/AppBundle/Resources/views/Hello/index.html.twig ``.
570569
571- You can even avoid calling the ``render `` method by using the ``@Template ``
572- annotation. See the
573- :doc: `FrameworkExtraBundle documentation </bundles/SensioFrameworkExtraBundle/annotations/view >`
574- more details.
570+ The Symfony templating engine is explained in great detail in the
571+ :doc: `Templating </book/templating >` chapter.
575572
576573.. tip ::
577574
578575 The ``renderView `` method is a shortcut to direct use of the ``templating ``
579576 service. The ``templating `` service can also be used directly::
580577
581578 $templating = $this->get('templating');
582- $content = $templating->render(
583- 'AcmeHelloBundle:Hello:index.html.twig',
584- array('name' => $name)
585- );
579+ $content = $templating->render('Hello/index.html.twig', array('name' => $name));
586580
587581.. note ::
588582
589583 It is possible to render templates in deeper subdirectories as well, however
590584 be careful to avoid the pitfall of making your directory structure unduly
591585 elaborate::
592586
593- $templating->render(
594- 'AcmeHelloBundle:Hello/Greetings:index.html.twig',
595- array('name' => $name)
596- );
597- // index.html.twig found in Resources/views/Hello/Greetings
598- // is rendered.
587+ $templating->render('Hello/Greetings/index.html.twig', array('name' => $name));
588+ // renders app/Resources/views/Hello/Greetings/index.html.twig
599589
600590.. index ::
601591 single: Controller; Accessing services
@@ -754,7 +744,7 @@ the ``notice`` message:
754744 <div class="flash-notice">
755745 <?php echo "<div class='flash-error'>$message</div>" ?>
756746 </div>
757- <?php endforeach; ?>
747+ <?php endforeach ?>
758748
759749By design, flash messages are meant to live for exactly one request (they're
760750"gone in a flash"). They're designed to be used across redirects exactly as
0 commit comments