Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

adding table for controller as a service#5033

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
weaverryan merged 2 commits intosymfony:2.3fromdbu:controller-service
Mar 14, 2015
Merged
Changes fromall commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 89 additions & 2 deletionscookbook/controller/service.rst
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -21,8 +21,10 @@ this works fine, controllers can also be specified as services.
looking at the constructor arguments, it's easy to see what types of things
this controller may or may not do. And because each dependency needs
to be injected manually, it's more obvious (i.e. if you have many constructor
arguments) when your controller has become too big, and may need to be
split into multiple controllers.
arguments) when your controller is becoming too big. The recommendation from
the :doc:`best practices </best_practices/controllers>` is also valid for
controllers defined as services: Avoid putting your business logic into the
controllers. Instead, inject services that do the bulk of the work.

So, even if you don't specify your controllers as services, you'll likely
see this done in some open-source Symfony bundles. It's also important
Expand DownExpand Up@@ -232,6 +234,91 @@ inject *only* the exact service(s) that you need directly into the controller.
are valid, exactly how you want to organize your reusable code is up to
you.

Base Controller Methods and Their Service Replacements
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This list explains how to replace the convenience methods of the base
controller:

:method:`Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller::createForm` (service: ``form.factory``)
.. code-block:: php

$formFactory->create($type, $data, $options);

:method:`Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller::createFormBuilder` (service: ``form.factory``)
.. code-block:: php

$formFactory->createBuilder('form', $data, $options);

:method:`Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller::createNotFoundException`
.. code-block:: php

new NotFoundHttpException($message, $previous);

:method:`Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller::forward` (service: ``http_kernel``)
.. code-block:: php

$httpKernel->forward($controller, $path, $query);

:method:`Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller::generateUrl` (service: ``router``)
.. code-block:: php

$router->generate($route, $params, $absolute);

:method:`Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller::getDoctrine` (service: ``doctrine``)

*Simply inject doctrine instead of fetching it from the container*

:method:`Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller::getUser` (service: ``security.context``)
.. code-block:: php

$user = null;
$token = $securityContext->getToken();
if (null !== $token && is_object($token->getUser())) {
$user = $token->getUser();
}

:method:`Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller::isGranted` (service: ``security.context``)
.. code-block:: php

$authorizationChecker->isGranted($attributes, $object);

:method:`Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller::redirect`
.. code-block:: php

use Symfony\Component\HttpFoundation\RedirectResponse;

return new RedirectResponse($url, $status);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Same asthis comment , why don't add FQCN forRedirectResponse class ?


:method:`Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller::render` (service: ``templating``)
.. code-block:: php

$templating->renderResponse($view, $parameters, $response);

:method:`Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller::renderView` (service: ``templating``)
.. code-block:: php

$templating->render($view, $parameters);

:method:`Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller::stream` (service: ``templating``)
.. code-block:: php

use Symfony\Component\HttpFoundation\StreamedResponse;

$templating = $this->templating;
$callback = function () use ($templating, $view, $parameters) {
$templating->stream($view, $parameters);
}

return new StreamedResponse($callback);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Maybe indicate the FQCN of theStreamedResponse class ?

Copy link
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

good point. added ause statement.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

👍


.. tip::

``getRequest`` has been deprecated. Instead, have an argument to your
controller action method called ``Request $request``. The order of the
parameters is not important, but the typehint must be provided.
Copy link
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

converted this to a separate tip. i think it does not hurt to mention this here again. the whole doc segment is for people afraid to look at the controller source code.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

👍



.. _`Controller class source code`: https://github.com/symfony/symfony/blob/master/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php
.. _`base Controller class`: https://github.com/symfony/symfony/blob/master/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php
.. _`FrameworkExtraBundle documentation`: http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/routing.html

[8]ページ先頭

©2009-2025 Movatter.jp