Skip to content

Commit 8e22758

Browse files
committed
Merge branch '2.3' into 2.5
2 parents 0a0880c + 91eb652 commit 8e22758

22 files changed

+598
-418
lines changed

book/controller.rst

Lines changed: 54 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,9 @@ or a ``Closure``), in Symfony, a controller is usually a single method inside
9191
a 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()``
184183
controller 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``.
188187
Symfony uses a flexible string notation to refer to different controllers.
189188
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
191190
method ``indexAction()`` is then executed.
192191

193192
For 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`.
212212
Route 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``
216216
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::
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

233233
The controller has a single argument, ``$name``, which corresponds to the
234234
``{name}`` parameter from the matched route (``ryan`` in the example). In
235235
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:
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.
377377
Add 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
427427
Though a controller can do virtually anything, most controllers will perform
428428
the same basic tasks over and over again. These tasks, such as redirecting,
429429
forwarding, 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

435435
Redirecting
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

490492
Notice that the ``forward()`` method uses the same string representation of
491493
the 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

555554
This can even be done in just one step with the ``render()`` method, which
556555
returns 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
@@ -751,7 +741,7 @@ the ``notice`` message:
751741
<div class="flash-notice">
752742
<?php echo "<div class='flash-error'>$message</div>" ?>
753743
</div>
754-
<?php endforeach; ?>
744+
<?php endforeach ?>
755745

756746
By design, flash messages are meant to live for exactly one request (they're
757747
"gone in a flash"). They're designed to be used across redirects exactly as

0 commit comments

Comments
 (0)