-
-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Document FQCN named controllers #7771
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 our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -66,36 +66,39 @@ Then you can define it as a service as follows: | |
|
||
# app/config/services.yml | ||
services: | ||
app.hello_controller: | ||
AppBundle\Controller\HelloController: | ||
class: AppBundle\Controller\HelloController | ||
|
||
.. code-block:: xml | ||
|
||
<!-- app/config/services.xml --> | ||
<services> | ||
<service id="app.hello_controller" class="AppBundle\Controller\HelloController" /> | ||
<service id="AppBundle\Controller\HelloController" class="AppBundle\Controller\HelloController" /> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Correct me if I'm wrong, but isn't this possible too? <service id="AppBundle\Controller\HelloController" /> There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes it is, but only in 3.3. I think we should keep a notation that works on every supported version as it's not the main subject. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Your aim is at the master branch, hence I thought you were doing this for 3.3 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Everything that used to work before 3.3 should probably target the respective lower branches in separate PRs. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm 👎 for changing service ids in 2.x docs, or we should do it absolutely everywhere. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It adds value only for controllers as it allows to use normal notations so I don't see the need to update all service ids. Also imo if it becomes the standard with 3.3 we should also promote it for 2.x. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What do you call "normal notations"? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ok got it. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. With fqcn named services you can use all controller notations (e.g. With other service ids you have to use the single colon notation: |
||
</services> | ||
|
||
.. code-block:: php | ||
|
||
// app/config/services.php | ||
use AppBundle\Controller\HelloController; | ||
|
||
$container->register('app.hello_controller', HelloController::class); | ||
$container->register(HelloController::class, HelloController::class); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Isn't something like this possible? $container->register(HelloController::class); I believe this also had a shortcut somehow. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Then we would have an example only working on 3.3, is it ok? |
||
|
||
Referring to the Service | ||
------------------------ | ||
|
||
To refer to a controller that's defined as a service, use the single colon (:) | ||
notation. For example, to forward to the ``indexAction()`` method of the service | ||
defined above with the id ``app.hello_controller``:: | ||
If the fully-qualified class name (FQCN) of your controller is also the id of | ||
your service then you can refer to your controller using the usual notations. | ||
For example, to forward to the ``indexAction()`` method of the service | ||
defined above with the id ``AppBundle\Controller\HelloController``:: | ||
|
||
$this->forward('app.hello_controller:indexAction', array('name' => $name)); | ||
$this->forward('AppBundle:Hello:index', array('name' => $name)); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Although I don't get why this is related to the fact that we use a FQCN as id. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Because this doesn't work with other service ids (fqcn named services are managed differently https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpKernel/Controller/ContainerControllerResolver.php#L70). There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ok got it too :). |
||
|
||
.. note:: | ||
To refer to a controller that's defined as a service whose ID is not your | ||
controller fully-qualified class name (FQCN), use the single colon (:) | ||
notation. For example, to forward to the ``indexAction()`` method of a service | ||
defined with the id ``app.hello_controller``:: | ||
|
||
You cannot drop the ``Action`` part of the method name when using this | ||
syntax. | ||
$this->forward('app.hello_controller:indexAction', array('name' => $name)); | ||
|
||
You can also route to the service by using the same notation when defining | ||
the route ``_controller`` value: | ||
|
@@ -123,17 +126,24 @@ the route ``_controller`` value: | |
'_controller' => 'app.hello_controller:indexAction', | ||
))); | ||
|
||
.. note:: | ||
|
||
You cannot drop the ``Action`` part of the method name when using this | ||
syntax. | ||
|
||
.. tip:: | ||
|
||
You can also use annotations to configure routing using a controller | ||
defined as a service. Make sure you specify the service ID in the | ||
``@Route`` annotation. See the `FrameworkExtraBundle documentation`_ for | ||
details. | ||
``@Route`` annotation if your service ID is not your controller | ||
fully-qualified class name (FQCN). See the | ||
`FrameworkExtraBundle documentation`_ for details. | ||
|
||
.. tip:: | ||
|
||
If your controller implements the ``__invoke()`` method, you can simply | ||
refer to the service id (``app.hello_controller``). | ||
refer to the service id (``AppBundle\Controller\HelloController`` or | ||
``app.hello_controller`` for example). | ||
|
||
.. versionadded:: 2.6 | ||
Support for ``__invoke()`` was introduced in Symfony 2.6. | ||
|
@@ -212,15 +222,15 @@ argument: | |
|
||
# app/config/services.yml | ||
services: | ||
app.hello_controller: | ||
AppBundle\Controller\HelloController: | ||
class: AppBundle\Controller\HelloController | ||
arguments: ['@templating'] | ||
|
||
.. code-block:: xml | ||
|
||
<!-- app/config/services.xml --> | ||
<services> | ||
<service id="app.hello_controller" class="AppBundle\Controller\HelloController"> | ||
<service id="AppBundle\Controller\HelloController" class="AppBundle\Controller\HelloController"> | ||
<argument type="service" id="templating"/> | ||
</service> | ||
</services> | ||
|
@@ -232,6 +242,7 @@ argument: | |
use Symfony\Component\DependencyInjection\Reference; | ||
|
||
$container->register('app.hello_controller', HelloController::class) | ||
$container->register(HelloController::class, HelloController::class) | ||
->addArgument(new Reference('templating')); | ||
|
||
Rather than fetching the ``templating`` service from the container, you can | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
class can be omitted here as well