Skip to content

[2.2] [FrameworkBundle] Tag support in container debug #4937

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

Merged
merged 2 commits into from
Oct 16, 2012

Conversation

Burgov
Copy link
Contributor

@Burgov Burgov commented Jul 15, 2012

Bug fix: no
Feature addition: yes
Backwards compatibility break: no
Symfony2 tests pass: yes
Fixes the following tickets: n/a
License of the code: MIT

This PR allows finding all services with a specified tag in the container:

> app/console container:debug --tag=form.type
[container] Public services
Service Id           Scope     Class Name
form.type.birthday   container Symfony\Component\Form\Extension\Core\Type\BirthdayType
form.type.checkbox   container Symfony\Component\Form\Extension\Core\Type\CheckboxType
form.type.choice     container Symfony\Component\Form\Extension\Core\Type\ChoiceType
form.type.collection container Symfony\Component\Form\Extension\Core\Type\CollectionType
form.type.country    container Symfony\Component\Form\Extension\Core\Type\CountryType
[ ... ]

Also, it adds more info on used tags when requesting info of a service:

Before:

> app/console container:debug data_collector.request
[container] Information for service data_collector.request

Service Id       data_collector.request
Class            Symfony\Bundle\FrameworkBundle\DataCollector\RequestDataCollector
Tags             kernel.event_listener, data_collector
Scope            container
Public           yes
Synthetic        no
Required File    -

After:

> app/console container:debug data_collector.request
[container] Information for service data_collector.request

Service Id       data_collector.request
Class            Symfony\Bundle\FrameworkBundle\DataCollector\RequestDataCollector
Tags
    - kernel.event_listener          (event: kernel.controller, method: onKernelController)
    - data_collector                 (template: WebProfilerBundle:Collector:request, id: request, priority: 255)
Scope            container
Public           yes
Synthetic        no
Required File    -

@@ -1363,6 +1363,9 @@ To use mock session storage use the following. `handler_id` is irrelevant in th
storage_id: session.storage.mock_file
```

You can now use the --tag option in the container:debug command to find all
options with a specific tag
Copy link
Member

Choose a reason for hiding this comment

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

This should not be in the Upgrade file. It is not a BC break

@Burgov
Copy link
Contributor Author

Burgov commented Jul 15, 2012

thanks @stof :)

@stof
Copy link
Member

stof commented Oct 13, 2012

@Burgov @richardmiller any news on this PR ? Is there any feature to port from #5522 or is it ready to be merged as is ?

@Burgov
Copy link
Contributor Author

Burgov commented Oct 14, 2012

@stof, I've merged richardmiller's branch and rebased it so that everything is now in one command (the original container:debug), so technically, this is now ready to be merged. Still there's two things that might be discussed:

  1. when using --tags, all other options and arguments are ignored. Perhaps an exception should be thrown when other parameters are passed?

  2. I'm not completely satisfied with the way the output of the command with the --tag argument looks, perhaps someone can share his ideas about it?

@@ -72,7 +81,19 @@ protected function execute(InputInterface $input, OutputInterface $output)
$name = $input->getArgument('name');

$this->containerBuilder = $this->getContainerBuilder();
$serviceIds = $this->containerBuilder->getServiceIds();

$tags = $input->getOption('tags');
Copy link
Member

Choose a reason for hiding this comment

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

you don't need to create a variable here as you use it only once

Copy link
Contributor Author

Choose a reason for hiding this comment

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

updated

@Burgov
Copy link
Contributor Author

Burgov commented Oct 15, 2012

@richardmiller any suggestions? I've tried to stay as close as possible to the normal output of this command, when using the --tag option, so using the output format you used couldn't really be done...

@fabpot
Copy link
Member

fabpot commented Oct 16, 2012

For the --tag output, and because the number of attributes is most of the time very limited, I would just add one new column per attribute:

~/ $ ./app/console container:debug --tag=form.type
[container] Public services with tag form.type
Service Id           Alias     Scope     Class Name
form.type.birthday   birthday  container Symfony\Component\Form\Extension\Core\Type\BirthdayType
form.type.checkbox   checkbox  container Symfony\Component\Form\Extension\Core\Type\CheckboxType
form.type.choice     choice    container Symfony\Component\Form\Extension\Core\Type\ChoiceType

@fabpot
Copy link
Member

fabpot commented Oct 16, 2012

When using --tags, an exception should indeed be thrown if other incompatible options are passed.

@fabpot
Copy link
Member

fabpot commented Oct 16, 2012

The last missing piece is a PR on the documentation. Thanks.

@Burgov
Copy link
Contributor Author

Burgov commented Oct 16, 2012

@fabpot I've added the tag attributes as columns to the normal output. Since services can have more of the same tag, I had to create an extra loop to represent this. For example, when debugging the kernel.event_listener tag, this is now the output:

> app/console container:debug --tag=kernel.event_listener 
[container] Public services with tag kernel.event_listener
Service Id                                 event             method             priority Scope     Class Name
acme.demo.listener                         kernel.controller onKernelController          container Acme\DemoBundle\EventListener\ControllerListener
assetic.request_listener                   kernel.request    onKernelRequest             container Symfony\Bundle\AsseticBundle\EventListener\RequestListener
data_collector.router                      kernel.controller onKernelController          container Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector
monolog.handler.firephp                    kernel.response   onKernelResponse            container Symfony\Bridge\Monolog\Handler\FirePHPHandler
security.firewall                          kernel.request    onKernelRequest    8        container Symfony\Component\Security\Http\Firewall
security.rememberme.response_listener      kernel.response   onKernelResponse            container Symfony\Component\Security\Http\RememberMe\ResponseListener
sensio_framework_extra.cache.listener      kernel.response   onKernelResponse            container Sensio\Bundle\FrameworkExtraBundle\EventListener\CacheListener
sensio_framework_extra.controller.listener kernel.controller onKernelController          container Sensio\Bundle\FrameworkExtraBundle\EventListener\ControllerListener
sensio_framework_extra.converter.listener  kernel.controller onKernelController          container Sensio\Bundle\FrameworkExtraBundle\EventListener\ParamConverterListener
sensio_framework_extra.view.listener       kernel.controller onKernelController          container Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener
  "                                        kernel.view       onKernelView                          

At this moment the " denotes that the same service as the line above is referenced.

@fabpot
Copy link
Member

fabpot commented Oct 16, 2012

@Burgov Looks good to me. Ping me when this is ready to be merged.

richardmiller-zz and others added 2 commits October 16, 2012 10:40
…:debug command and display all tag attributes as columns in normal container:debug output
@Burgov
Copy link
Contributor Author

Burgov commented Oct 16, 2012

ping @fabpot I've rebased and I think it should be ready to go

fabpot added a commit that referenced this pull request Oct 16, 2012
This PR was merged into the master branch.

Commits
-------

34b60f7 [FrameworkBundle] more verbose output about service tags in container:debug command and display all tag attributes as columns in normal container:debug output
2a9805e [FrameworkBundle] Adding a option to debug services by tag

Discussion
----------

[2.2] [FrameworkBundle] Tag support in container debug

Bug fix: no
Feature addition: yes
Backwards compatibility break: no
Symfony2 tests pass: yes
Fixes the following tickets: n/a
License of the code: MIT

This PR allows finding all services with a specified tag in the container:

```
> app/console container:debug --tag=form.type
[container] Public services
Service Id           Scope     Class Name
form.type.birthday   container Symfony\Component\Form\Extension\Core\Type\BirthdayType
form.type.checkbox   container Symfony\Component\Form\Extension\Core\Type\CheckboxType
form.type.choice     container Symfony\Component\Form\Extension\Core\Type\ChoiceType
form.type.collection container Symfony\Component\Form\Extension\Core\Type\CollectionType
form.type.country    container Symfony\Component\Form\Extension\Core\Type\CountryType
[ ... ]
```

Also, it adds more info on used tags when requesting info of a service:

Before:

```
> app/console container:debug data_collector.request
[container] Information for service data_collector.request

Service Id       data_collector.request
Class            Symfony\Bundle\FrameworkBundle\DataCollector\RequestDataCollector
Tags             kernel.event_listener, data_collector
Scope            container
Public           yes
Synthetic        no
Required File    -
```

After:
```
> app/console container:debug data_collector.request
[container] Information for service data_collector.request

Service Id       data_collector.request
Class            Symfony\Bundle\FrameworkBundle\DataCollector\RequestDataCollector
Tags
    - kernel.event_listener          (event: kernel.controller, method: onKernelController)
    - data_collector                 (template: WebProfilerBundle:Collector:request, id: request, priority: 255)
Scope            container
Public           yes
Synthetic        no
Required File    -
```

---------------------------------------------------------------------------

by Burgov at 2012-07-15T21:00:46Z

thanks @stof :)

---------------------------------------------------------------------------

by stof at 2012-10-13T17:50:23Z

@Burgov @richardmiller any news on this PR ? Is there any feature to port from #5522 or is it ready to be merged as is ?

---------------------------------------------------------------------------

by Burgov at 2012-10-14T11:17:51Z

@stof, I've merged richardmiller's branch and rebased it so that everything is now in one command (the original container:debug), so technically, this is now ready to be merged. Still there's two things that might be discussed:

1) when using --tags, all other options and arguments are ignored. Perhaps an exception should be thrown when other parameters are passed?

2) I'm not completely satisfied with the way the output of the command with the --tag argument looks, perhaps someone can share his ideas about it?

---------------------------------------------------------------------------

by Burgov at 2012-10-15T07:19:29Z

@richardmiller any suggestions? I've tried to stay as close as possible to the normal output of this command, when using the --tag option, so using the output format you used couldn't really be done...

---------------------------------------------------------------------------

by fabpot at 2012-10-16T06:50:12Z

For the `--tag` output, and because the number of attributes is most of the time very limited, I would just add one new column per attribute:

```
~/ $ ./app/console container:debug --tag=form.type
[container] Public services with tag form.type
Service Id           Alias     Scope     Class Name
form.type.birthday   birthday  container Symfony\Component\Form\Extension\Core\Type\BirthdayType
form.type.checkbox   checkbox  container Symfony\Component\Form\Extension\Core\Type\CheckboxType
form.type.choice     choice    container Symfony\Component\Form\Extension\Core\Type\ChoiceType
```

---------------------------------------------------------------------------

by fabpot at 2012-10-16T06:51:04Z

When using ``--tags``, an exception should indeed be thrown if other incompatible options are passed.

---------------------------------------------------------------------------

by fabpot at 2012-10-16T06:51:20Z

The last missing piece is a PR on the documentation. Thanks.

---------------------------------------------------------------------------

by Burgov at 2012-10-16T08:17:25Z

@fabpot I've added the tag attributes as columns to the normal output. Since services can have more of the same tag, I had to create an extra loop to represent this. For example, when debugging the kernel.event_listener tag, this is now the output:

```
> app/console container:debug --tag=kernel.event_listener
[container] Public services with tag kernel.event_listener
Service Id                                 event             method             priority Scope     Class Name
acme.demo.listener                         kernel.controller onKernelController          container Acme\DemoBundle\EventListener\ControllerListener
assetic.request_listener                   kernel.request    onKernelRequest             container Symfony\Bundle\AsseticBundle\EventListener\RequestListener
data_collector.router                      kernel.controller onKernelController          container Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector
monolog.handler.firephp                    kernel.response   onKernelResponse            container Symfony\Bridge\Monolog\Handler\FirePHPHandler
security.firewall                          kernel.request    onKernelRequest    8        container Symfony\Component\Security\Http\Firewall
security.rememberme.response_listener      kernel.response   onKernelResponse            container Symfony\Component\Security\Http\RememberMe\ResponseListener
sensio_framework_extra.cache.listener      kernel.response   onKernelResponse            container Sensio\Bundle\FrameworkExtraBundle\EventListener\CacheListener
sensio_framework_extra.controller.listener kernel.controller onKernelController          container Sensio\Bundle\FrameworkExtraBundle\EventListener\ControllerListener
sensio_framework_extra.converter.listener  kernel.controller onKernelController          container Sensio\Bundle\FrameworkExtraBundle\EventListener\ParamConverterListener
sensio_framework_extra.view.listener       kernel.controller onKernelController          container Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener
  "                                        kernel.view       onKernelView
```

At this moment the " denotes that the same service as the line above is referenced.

---------------------------------------------------------------------------

by fabpot at 2012-10-16T08:37:38Z

@Burgov Looks good to me. Ping me when this is ready to be merged.

---------------------------------------------------------------------------

by Burgov at 2012-10-16T09:09:46Z

ping @fabpot I've rebased and I think it should be ready to go
@fabpot fabpot merged commit 34b60f7 into symfony:master Oct 16, 2012
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants