-
-
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
Conversation
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 comment
The 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 comment
The 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 comment
The 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 comment
The 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 comment
The reason will be displayed to describe this comment to others. Learn more.
</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 comment
The 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 comment
The 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?
@@ -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 |
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
e5285f3
to
99ba301
Compare
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 comment
The 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 comment
The 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 comment
The 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 comment
The 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 comment
The reason will be displayed to describe this comment to others. Learn more.
With fqcn named services you can use all controller notations (e.g. AppBundle\Controller\HelloController::fooAction
, App:Hello:foo
, etc.). No need to define the service if you use @Route
.
With other service ids you have to use the single colon notation: app.hello_controller:fooAction
.
controller/service.rst
Outdated
|
||
$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 comment
The 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 comment
The 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 comment
The reason will be displayed to describe this comment to others. Learn more.
Ok got it too :).
I think this is indeed a good idea! Can we update this to use annotations for routing (and of course also show yaml like we do in other places)? Before the class names, using @route was kind of a pain because you needed the extra annotation, but that's not true now. Overall, I like this - good explanations of the different syntaxes! |
@javiereguiluz it removes the |
I see. Then it makes sense. Thanks! |
@weaverryan I added an example with |
@GuilhemN Can you resolve the conflicts here? |
Sure, it's done. I can't rebase before tomorrow around 6pm but you can push on my repo if you want to merge this before. |
7b53ef2
to
280a5c7
Compare
rebased |
Should I close this ? |
I think we should keep this in |
I don't think that's a problem, we often change our practices even in older branches. Anyway, I'm closing this, I think the gain is not so big in 2.x because you have to duplicate the |
This is possible since 2.7 but with 3.3 coming and the ability to have FQCN named services I think this is a more and more convenient notation that should be encouraged.