-
-
Notifications
You must be signed in to change notification settings - Fork 9.6k
Fixed an error in EventDispatcher::disconnect, Added support for "global" event listeners with $name = null #20
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
Maybe I was too unclear about "global" in this case, What I refer to is a listener which fires on all events on a dispatcher. I was quite sure, I read in somewhere in the doc code, but can't find it right now. Anyway what I would use it for:
But there are downsides if there are lots of event-listeners and you don't know whether they have been added yet. So you got to check the existence each time. It'd be much easier when just can throw in an event listener, listening to all events. Maybe I can write an even fine-grained control by interpreting "" as wildcard in a name. Then "" would be global, but you could also add listeners to specific categories of events, like "client.*". |
…dOutput + Table + Emails (javiereguiluz) This PR was squashed before being merged into the master branch (closes symfony#20). Discussion ---------- Added a new app:list-users command to show BufferedOutput + Table + Emails Commits ------- 69cce9c Added a new app:list-users command to show BufferedOutput + Table + Emails
Added CVE-2014-2383 security advisory
This PR was merged into the 5.2-dev branch. Discussion ---------- [VarDumper] Support for ReflectionAttribute | Q | A | ------------- | --- | Branch? | master | Bug fix? | no | New feature? | yes | Deprecations? | no | Tickets | N/A | License | MIT | Doc PR | not needed VarDumper currently does not understand that certain reflection objects might have attributes attached to it. Dumping a `ReflectionAttribute` just yields `ReflectionAttribute {#4711}` which is not really helpful. This PR attempts to fix this. ``` ReflectionAttribute {#4711 name: "App\MyAttribute" arguments: array:2 [ 0 => "one" "extra" => "hello" ] } ``` While working on this, I noticed that class constants (which can be reflected on since PHP 7.1) are just dumped as plain values, so I've also added a caster for `ReflectionClasConstant` as bonus. The full output for the `LotsOfAttributes` fixture class that is included with is PR looks like this: <details> ``` ^ ReflectionClass {#7 +name: "Symfony\Component\VarDumper\Tests\Fixtures\LotsOfAttributes" modifiers: "final" implements: [] constants: array:1 [ 0 => ReflectionClassConstant {#20 +name: "SOME_CONSTANT" +class: "Symfony\Component\VarDumper\Tests\Fixtures\LotsOfAttributes" modifiers: "public" value: "some value" attributes: array:2 [ 0 => ReflectionAttribute {#33 name: "Symfony\Component\VarDumper\Tests\Fixtures\RepeatableAttribute" arguments: array:1 [ 0 => "one" ] } 1 => ReflectionAttribute {#34 name: "Symfony\Component\VarDumper\Tests\Fixtures\RepeatableAttribute" arguments: array:1 [ 0 => "two" ] } ] } ] properties: array:1 [ "someProperty" => ReflectionProperty {#19 +name: "someProperty" +class: "Symfony\Component\VarDumper\Tests\Fixtures\LotsOfAttributes" modifiers: "private" attributes: array:1 [ 0 => ReflectionAttribute {#30 name: "Symfony\Component\VarDumper\Tests\Fixtures\MyAttribute" arguments: array:2 [ 0 => "one" "extra" => "hello" ] } ] } ] methods: array:1 [ "someMethod" => ReflectionMethod {#21 +name: "someMethod" +class: "Symfony\Component\VarDumper\Tests\Fixtures\LotsOfAttributes" returnType: "void" parameters: { $someParameter: ReflectionParameter {#28 +name: "someParameter" position: 0 attributes: array:1 [ 0 => ReflectionAttribute {#42 name: "Symfony\Component\VarDumper\Tests\Fixtures\MyAttribute" arguments: array:1 [ 0 => "three" ] } ] typeHint: "string" } } attributes: array:1 [ 0 => ReflectionAttribute {#27 name: "Symfony\Component\VarDumper\Tests\Fixtures\MyAttribute" arguments: array:1 [ 0 => "two" ] } ] modifiers: "public" } ] attributes: array:1 [ 0 => ReflectionAttribute {#22 name: "Symfony\Component\VarDumper\Tests\Fixtures\MyAttribute" arguments: [] } ] extra: { file: "./src/Symfony/Component/VarDumper/Tests/Fixtures/LotsOfAttributes.php" line: "15 to 28" isUserDefined: true } } ``` </details> Commits ------- 34dbf01 [VarDumper] Support for ReflectionAttribute.
Delete `$baseUri` on test teardown
# Das ist die erste Commit-Beschreibung: [Notifier] add support for gatewayapi-notifier # Die Commit-Beschreibung symfony#2 wird ausgelassen: # Make GatewayAPITransportFactory final # Die Commit-Beschreibung symfony#3 wird ausgelassen: # Fix typo in gatewaypi # Die Commit-Beschreibung symfony#4 wird ausgelassen: # Fix typo # Die Commit-Beschreibung symfony#5 wird ausgelassen: # Update README.md # Die Commit-Beschreibung symfony#6 wird ausgelassen: # Rename GatewayAPI -> GatewayApi # Die Commit-Beschreibung symfony#7 wird ausgelassen: # Add GatewayApiTransportFactory tests # Die Commit-Beschreibung symfony#8 wird ausgelassen: # Add GatewayApiTransportTest testSend # Die Commit-Beschreibung symfony#9 wird ausgelassen: # Add GatewayApiTransportTest testSupportsSmsMessage # Die Commit-Beschreibung symfony#10 wird ausgelassen: # Add GatewayApiTransportTest testNotSupportsChatMessage # Die Commit-Beschreibung symfony#11 wird ausgelassen: # Lint code # Die Commit-Beschreibung symfony#12 wird ausgelassen: # Fix name and email in composer.json # # Co-authored-by: Tobias Nyholm <tobias.nyholm@gmail.com> # Die Commit-Beschreibung symfony#13 wird ausgelassen: # Remove extra from composer.json # Die Commit-Beschreibung symfony#14 wird ausgelassen: # Update version tag in GatewayApiTransport # Die Commit-Beschreibung symfony#15 wird ausgelassen: # Add /.gitattributes export-ignore in .gitattributes # Die Commit-Beschreibung symfony#16 wird ausgelassen: # Update UnsupportedSchemeException # Die Commit-Beschreibung symfony#17 wird ausgelassen: # Add required space in phpdoc # Die Commit-Beschreibung symfony#18 wird ausgelassen: # Update GatewayApiTransportFactory.php # # Update version tag in GatewayApiTransportFactory # Die Commit-Beschreibung symfony#19 wird ausgelassen: # [Notifier] add support for gatewayapi-notifier # Die Commit-Beschreibung symfony#20 wird ausgelassen: # Make GatewayAPITransportFactory final # Die Commit-Beschreibung symfony#21 wird ausgelassen: # Make GatewayAPITransportFactory final # Die Commit-Beschreibung symfony#22 wird ausgelassen: # Fix typo in gatewaypi # Die Commit-Beschreibung symfony#23 wird ausgelassen: # Fix typo # Die Commit-Beschreibung symfony#24 wird ausgelassen: # Update README.md
…afimArts) This PR was squashed before being merged into the 6.2 branch. Discussion ---------- [VarDumper] Add `FFI\CData` and `FFI\CType` types | Q | A | ------------- | --- | Branch? | 6.2 | Bug fix? | no | New feature? | yes | Deprecations? | no | Tickets | - | License | MIT | Doc PR | - Added support of FFI: ```php $ffi = \FFI::cdef(<<<'CPP' typedef struct { int x; int y; } Point; typedef struct Example { uint8_t array[32]; long longVal; __extension__ union { __extension__ struct { short shortVal; }; struct { Point point; float e; }; }; bool boolValue; int (*func)(struct __sub *h); } Example; CPP); $struct = $ffi->new('Example'); $struct->func = (static fn (object $ptr) => 42); dump($struct); ``` **Before** ``` FFI\CData {#2} ``` **After** ``` FFI\CData<struct Example> size 64 align 8 {#2 +array: FFI\CData<uint8_t[32]> size 32 align 1 {#18} +int32_t longVal: 0 +int16_t shortVal: 0 +point: FFI\CData<struct <anonymous>> size 8 align 4 {#17 +int32_t x: 0 +int32_t y: 0 } +float e: 0.0 +bool boolValue: false +func: [cdecl] callable(struct __sub*): int32_t {#20 returnType: FFI\CType<int32_t> size 4 align 4 {#25} } } ``` P.S. I apologize for the multiple force pushes, errors in tests and codestyle have been fixed. ## Review And TODOs - Pointers - [x] Pointer to scalar tests. - [x] Pointer to struct tests. - [x] "Special" pointer to `char*` tests (with `\0` and without `\0`). - Possible Errors - [x] Do not dump union fields with pointer references (possible SIGSEGV). Commits ------- 1c7dc52 [VarDumper] Add `FFI\CData` and `FFI\CType` types
…lishing a message. (jwage) This PR was squashed before being merged into the 6.4 branch. Discussion ---------- [Messenger] [Amqp] Handle AMQPConnectionException when publishing a message. | Q | A | ------------- | --- | Branch? | 6.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Issues | Fix #36538 Fix #48241 | License | MIT If you have a message handler that dispatches messages to another queue, you can encounter `AMQPConnectionException` with the message "Library error: a SSL error occurred" or "a socket error occurred" depending on if you are using tls or not or if you are running behind a load balancer or not. You can manually reproduce this issue by dispatching a message where the handler then dispatches another message to a different queue, then go to rabbitmq admin and close the connection manually, then dispatch another message and when the message handler goes to dispatch the other message, you will get this exception: ``` a socket error occurred #0 /vagrant/vendor/symfony/amqp-messenger/Transport/AmqpTransport.php(60): Symfony\Component\Messenger\Bridge\Amqp\Transport\AmqpSender->send() #1 /vagrant/vendor/symfony/messenger/Middleware/SendMessageMiddleware.php(62): Symfony\Component\Messenger\Bridge\Amqp\Transport\AmqpTransport->send() #2 /vagrant/vendor/symfony/messenger/Middleware/FailedMessageProcessingMiddleware.php(34): Symfony\Component\Messenger\Middleware\SendMessageMiddleware->handle() #3 /vagrant/vendor/symfony/messenger/Middleware/DispatchAfterCurrentBusMiddleware.php(61): Symfony\Component\Messenger\Middleware\FailedMessageProcessingMiddleware->handle() #4 /vagrant/vendor/symfony/messenger/Middleware/RejectRedeliveredMessageMiddleware.php(41): Symfony\Component\Messenger\Middleware\DispatchAfterCurrentBusMiddleware->handle() #5 /vagrant/vendor/symfony/messenger/Middleware/AddBusNameStampMiddleware.php(37): Symfony\Component\Messenger\Middleware\RejectRedeliveredMessageMiddleware->handle() #6 /vagrant/vendor/symfony/messenger/Middleware/TraceableMiddleware.php(40): Symfony\Component\Messenger\Middleware\AddBusNameStampMiddleware->handle() #7 /vagrant/vendor/symfony/messenger/MessageBus.php(70): Symfony\Component\Messenger\Middleware\TraceableMiddleware->handle() #8 /vagrant/vendor/symfony/messenger/TraceableMessageBus.php(38): Symfony\Component\Messenger\MessageBus->dispatch() #9 /vagrant/src/Messenger/MessageBus.php(37): Symfony\Component\Messenger\TraceableMessageBus->dispatch() #10 /vagrant/vendor/symfony/mailer/Mailer.php(66): App\Messenger\MessageBus->dispatch() #11 /vagrant/src/Mailer/Mailer.php(83): Symfony\Component\Mailer\Mailer->send() #12 /vagrant/src/Mailer/Mailer.php(96): App\Mailer\Mailer->send() #13 /vagrant/src/MessageHandler/Trading/StrategySubscriptionMessageHandler.php(118): App\Mailer\Mailer->sendEmail() #14 /vagrant/src/MessageHandler/Trading/StrategySubscriptionMessageHandler.php(72): App\MessageHandler\Trading\StrategySubscriptionMessageHandler->handle() #15 /vagrant/vendor/symfony/messenger/Middleware/HandleMessageMiddleware.php(152): App\MessageHandler\Trading\StrategySubscriptionMessageHandler->__invoke() #16 /vagrant/vendor/symfony/messenger/Middleware/HandleMessageMiddleware.php(91): Symfony\Component\Messenger\Middleware\HandleMessageMiddleware->callHandler() #17 /vagrant/vendor/symfony/messenger/Middleware/SendMessageMiddleware.php(71): Symfony\Component\Messenger\Middleware\HandleMessageMiddleware->handle() #18 /vagrant/vendor/symfony/messenger/Middleware/FailedMessageProcessingMiddleware.php(34): Symfony\Component\Messenger\Middleware\SendMessageMiddleware->handle() #19 /vagrant/vendor/symfony/messenger/Middleware/DispatchAfterCurrentBusMiddleware.php(68): Symfony\Component\Messenger\Middleware\FailedMessageProcessingMiddleware->handle() #20 /vagrant/vendor/symfony/messenger/Middleware/RejectRedeliveredMessageMiddleware.php(41): Symfony\Component\Messenger\Middleware\DispatchAfterCurrentBusMiddleware->handle() #21 /vagrant/vendor/symfony/messenger/Middleware/AddBusNameStampMiddleware.php(37): Symfony\Component\Messenger\Middleware\RejectRedeliveredMessageMiddleware->handle() #22 /vagrant/vendor/symfony/messenger/Middleware/TraceableMiddleware.php(40): Symfony\Component\Messenger\Middleware\AddBusNameStampMiddleware->handle() #23 /vagrant/vendor/symfony/messenger/MessageBus.php(70): Symfony\Component\Messenger\Middleware\TraceableMiddleware->handle() #24 /vagrant/vendor/symfony/messenger/TraceableMessageBus.php(38): Symfony\Component\Messenger\MessageBus->dispatch() #25 /vagrant/vendor/symfony/messenger/RoutableMessageBus.php(54): Symfony\Component\Messenger\TraceableMessageBus->dispatch() #26 /vagrant/vendor/symfony/messenger/Worker.php(162): Symfony\Component\Messenger\RoutableMessageBus->dispatch() #27 /vagrant/vendor/symfony/messenger/Worker.php(109): Symfony\Component\Messenger\Worker->handleMessage() #28 /vagrant/vendor/symfony/messenger/Command/ConsumeMessagesCommand.php(238): Symfony\Component\Messenger\Worker->run() #29 /vagrant/vendor/symfony/console/Command/Command.php(326): Symfony\Component\Messenger\Command\ConsumeMessagesCommand->execute() #30 /vagrant/vendor/symfony/console/Application.php(1096): Symfony\Component\Console\Command\Command->run() #31 /vagrant/vendor/symfony/framework-bundle/Console/Application.php(126): Symfony\Component\Console\Application->doRunCommand() #32 /vagrant/vendor/symfony/console/Application.php(324): Symfony\Bundle\FrameworkBundle\Console\Application->doRunCommand() #33 /vagrant/vendor/symfony/framework-bundle/Console/Application.php(80): Symfony\Component\Console\Application->doRun() #34 /vagrant/vendor/symfony/console/Application.php(175): Symfony\Bundle\FrameworkBundle\Console\Application->doRun() #35 /vagrant/vendor/symfony/runtime/Runner/Symfony/ConsoleApplicationRunner.php(49): Symfony\Component\Console\Application->run() #36 /vagrant/vendor/autoload_runtime.php(29): Symfony\Component\Runtime\Runner\Symfony\ConsoleApplicationRunner->run() #37 /vagrant/bin/console(11): require_once('...') #38 {main} ``` TODO: - [x] Add test for retry logic when publishing messages Commits ------- f123370 [Messenger] [Amqp] Handle AMQPConnectionException when publishing a message.
The behaviour of disconnect() didn't match its description: If you pass NULL as the listener, no listener instead of all an event's listeners is disconnected.
I added the missing check for null and a test for it.
I added some first tests. Probably some more tests to verify notify/filter/notifyAll/... should be added as well to guarantee correct behavior if those methods stop using getListeners().