@@ -91,10 +91,9 @@ or a ``Closure``), in Symfony, a controller is usually a single method inside
91
91
a controller object. Controllers are also called *actions *.
92
92
93
93
.. code-block :: php
94
- :linenos:
95
94
96
- // src/Acme/HelloBundle /Controller/HelloController.php
97
- namespace Acme\HelloBundle \Controller;
95
+ // src/AppBundle /Controller/HelloController.php
96
+ namespace AppBundle \Controller;
98
97
99
98
use Symfony\Component\HttpFoundation\Response;
100
99
@@ -151,7 +150,7 @@ to the controller:
151
150
# app/config/routing.yml
152
151
hello :
153
152
path : /hello/{name}
154
- defaults : { _controller: AcmeHelloBundle :Hello:index }
153
+ defaults : { _controller: AppBundle :Hello:index }
155
154
156
155
.. code-block :: xml
157
156
@@ -163,7 +162,7 @@ to the controller:
163
162
http://symfony.com/schema/routing/routing-1.0.xsd" >
164
163
165
164
<route id =" hello" path =" /hello/{name}" >
166
- <default key =" _controller" >AcmeHelloBundle :Hello:index</default >
165
+ <default key =" _controller" >AppBundle :Hello:index</default >
167
166
</route >
168
167
</routes >
169
168
@@ -175,7 +174,7 @@ to the controller:
175
174
176
175
$collection = new RouteCollection();
177
176
$collection->add('hello', new Route('/hello/{name}', array(
178
- '_controller' => 'AcmeHelloBundle :Hello:index',
177
+ '_controller' => 'AppBundle :Hello:index',
179
178
)));
180
179
181
180
return $collection;
@@ -184,10 +183,10 @@ Going to ``/hello/ryan`` now executes the ``HelloController::indexAction()``
184
183
controller and passes in ``ryan `` for the ``$name `` variable. Creating a
185
184
"page" means simply creating a controller method and associated route.
186
185
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 ``.
188
187
Symfony uses a flexible string notation to refer to different controllers.
189
188
This 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
191
190
method ``indexAction() `` is then executed.
192
191
193
192
For more details on the string format used to reference different controllers,
@@ -202,7 +201,8 @@ see :ref:`controller-string-syntax`.
202
201
203
202
.. tip ::
204
203
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 >`.
206
206
207
207
.. index ::
208
208
single: Controller; Controller arguments
@@ -212,29 +212,29 @@ see :ref:`controller-string-syntax`.
212
212
Route Parameters as Controller Arguments
213
213
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
214
214
215
- You already know that the ``_controller `` parameter ``AcmeHelloBundle :Hello:index ``
215
+ You already know that the ``_controller `` parameter ``AppBundle :Hello:index ``
216
216
refers 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::
219
219
220
- // src/Acme/HelloBundle /Controller/HelloController.php
221
- namespace Acme\HelloBundle \Controller;
220
+ // src/AppBundle /Controller/HelloController.php
221
+ namespace AppBundle \Controller;
222
222
223
223
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
224
224
225
225
class HelloController extends Controller
226
226
{
227
227
public function indexAction($name)
228
228
{
229
- // ...
229
+ // ...
230
230
}
231
231
}
232
232
233
233
The controller has a single argument, ``$name ``, which corresponds to the
234
234
``{name} `` parameter from the matched route (``ryan `` in the example). In
235
235
fact, 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:
238
238
239
239
.. configuration-block ::
240
240
@@ -243,7 +243,7 @@ example:
243
243
# app/config/routing.yml
244
244
hello :
245
245
path : /hello/{firstName}/{lastName}
246
- defaults : { _controller: AcmeHelloBundle :Hello:index, color: green }
246
+ defaults : { _controller: AppBundle :Hello:index, color: green }
247
247
248
248
.. code-block :: xml
249
249
@@ -255,7 +255,7 @@ example:
255
255
http://symfony.com/schema/routing/routing-1.0.xsd" >
256
256
257
257
<route id =" hello" path =" /hello/{firstName}/{lastName}" >
258
- <default key =" _controller" >AcmeHelloBundle :Hello:index</default >
258
+ <default key =" _controller" >AppBundle :Hello:index</default >
259
259
<default key =" color" >green</default >
260
260
</route >
261
261
</routes >
@@ -268,7 +268,7 @@ example:
268
268
269
269
$collection = new RouteCollection();
270
270
$collection->add('hello', new Route('/hello/{firstName}/{lastName}', array(
271
- '_controller' => 'AcmeHelloBundle :Hello:index',
271
+ '_controller' => 'AppBundle :Hello:index',
272
272
'color' => 'green',
273
273
)));
274
274
@@ -377,8 +377,8 @@ you can take advantage of several helper methods.
377
377
Add the ``use `` statement atop the ``Controller `` class and then modify the
378
378
``HelloController `` to extend it::
379
379
380
- // src/Acme/HelloBundle /Controller/HelloController.php
381
- namespace Acme\HelloBundle \Controller;
380
+ // src/AppBundle /Controller/HelloController.php
381
+ namespace AppBundle \Controller;
382
382
383
383
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
384
384
use Symfony\Component\HttpFoundation\Response;
@@ -422,15 +422,17 @@ Common Controller Tasks
422
422
Though a controller can do virtually anything, most controllers will perform
423
423
the same basic tasks over and over again. These tasks, such as redirecting,
424
424
forwarding, 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 .
426
426
427
427
.. index ::
428
428
single: Controller; Redirecting
429
429
430
430
Redirecting
431
431
~~~~~~~~~~~
432
432
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::
434
436
435
437
public function indexAction()
436
438
{
@@ -472,7 +474,7 @@ object that's returned from that controller::
472
474
473
475
public function indexAction($name)
474
476
{
475
- $response = $this->forward('AcmeHelloBundle:Hello :fancy', array(
477
+ $response = $this->forward('AppBundle:Something :fancy', array(
476
478
'name' => $name,
477
479
'color' => 'green',
478
480
));
@@ -484,22 +486,22 @@ object that's returned from that controller::
484
486
485
487
Notice that the ``forward() `` method uses the same string representation of
486
488
the 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::
492
494
493
495
public function fancyAction($name, $color)
494
496
{
495
497
// ... create and return a Response object
496
498
}
497
499
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.
503
505
504
506
.. tip ::
505
507
@@ -512,7 +514,7 @@ value to each variable.
512
514
use Symfony\Component\HttpKernel\HttpKernelInterface;
513
515
514
516
$path = array(
515
- '_controller' => 'AcmeHelloBundle:Hello :fancy',
517
+ '_controller' => 'AppBundle:Something :fancy',
516
518
'name' => $name,
517
519
'color' => 'green',
518
520
);
@@ -540,57 +542,45 @@ content from the template can be used to create a ``Response`` object::
540
542
541
543
use Symfony\Component\HttpFoundation\Response;
542
544
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));
547
546
548
547
return new Response($content);
549
548
550
549
This can even be done in just one step with the ``render() `` method, which
551
550
returns a ``Response `` object containing the content from the template::
552
551
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));
557
553
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.
560
556
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
563
558
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 ``.
565
564
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.
570
567
571
568
.. tip ::
572
569
573
570
The ``renderView `` method is a shortcut to direct use of the ``templating ``
574
571
service. The ``templating `` service can also be used directly::
575
572
576
573
$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));
581
575
582
576
.. note ::
583
577
584
578
It is possible to render templates in deeper subdirectories as well, however
585
579
be careful to avoid the pitfall of making your directory structure unduly
586
580
elaborate::
587
581
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
594
584
595
585
.. index ::
596
586
single: Controller; Accessing services
0 commit comments