8000 Merge branch '4.1' · symfony/symfony@4a7e6fa · GitHub
[go: up one dir, main page]

Skip to content

Commit 4a7e6fa

Browse files
committed
Merge branch '4.1'
* 4.1: [Messenger] Middleware factories support in config [HttpKernel] Make TraceableValueResolver $stopwatch mandatory [Messenger] Improve the profiler panel [Workflow] Added DefinitionBuilder::setMetadataStore(). [Messenger][DX] Uses custom method names for handlers [Messenger] remove autoconfiguration for Sender/ReceiverInterface [Messenger] Make sure default receiver name is set before command configuration [HttpKernel] Fix services are no longer injected into __invoke controllers method Rename tag attribute "name" by "alias" Autoconfiguring TransportFactoryInterface classes [Messenger] Fix new AMQP Transport test with Envelope Fixed return senders based on the message parents/interfaces [Messenger] Make sure Sender and Receiver locators have valid services [Workflow] add is deprecated since Symfony 4.1. Use addWorkflow() instead [Messenger] Fix TraceableBus with envelope Ensure the envelope is passed back and can be altered Ensure that the middlewares can also update the message within the envelope feature #26945 [Messenger] Support configuring messages when dispatching (ogizanagi) Add more tests around the AMQP transport
2 parents 784a7ac + f59ce97 commit 4a7e6fa

File tree

77 files changed

+1806
-326
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+1806
-326
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Bridge\Doctrine\Messenger;
13+
14+
use Symfony\Bridge\Doctrine\ManagerRegistry;
15+
16+
/**
17+
* Create a Doctrine ORM transaction middleware to be used in a message bus from an entity manager name.
18+
*
19+
* @author Maxime Steinhausser <maxime.steinhausser@gmail.com>
20+
*
21+
* @experimental in 4.1
22+
* @final
23+
*/
24+
class DoctrineTransactionMiddlewareFactory
25+
{
26+
private $managerRegistry;
27+
28+
public function __construct(ManagerRegistry $managerRegistry)
29+
{
30+
$this->managerRegistry = $managerRegistry;
31+
}
32+
33+
public function createMiddleware(string $managerName): DoctrineTransactionMiddleware
34+
{
35+
return new DoctrineTransactionMiddleware($this->managerRegistry, $managerName);
36+
}
37+
}

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1061,7 +1061,36 @@ function ($a) {
10611061
})
10621062
->end()
10631063
->defaultValue(array())
1064-
->prototype('scalar')->end()
1064+
->prototype('array')
1065+
->beforeNormalization()
1066+
->always()
1067+
->then(function ($middleware): array {
1068+
if (!\is_array($middleware)) {
1069+
return array('id' => $middleware);
1070+
}
1071+
if (isset($middleware['id'])) {
1072+
return $middleware;
1073+
}
1074+
if (\count($middleware) > 1) {
1075+
throw new \InvalidArgumentException(sprintf('There is an error at path "framework.messenger" in one of the buses middleware definitions: expected a single entry for a middleware item config, with factory id as key and arguments as value. Got "%s".', json_encode($middleware)));
1076+
}
1077+
1078+
return array(
1079+
'id' => key($middleware),
1080+
'arguments' => current($middleware),
1081+
);
1082+
})
1083+
->end()
1084+
->fixXmlConfig('argument')
1085+
->children()
1086+
->scalarNode('id')->isRequired()->cannotBeEmpty()->end()
1087+
->arrayNode('arguments')
1088+
->normalizeKeys(false)
1089+
->defaultValue(array())
1090+
->prototype('variable')
1091+
->end()
1092+
->end()
1093+
->end()
10651094
->end()
10661095
->end()
10671096
->end()

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,7 @@
6363
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
6464
use Symfony\Component\Messenger\MessageBus;
6565
use Symfony\Component\Messenger\MessageBusInterface;
66-
use Symfony\Component\Messenger\Transport\ReceiverInterface;
67-
use Symfony\Component\Messenger\Transport\SenderInterface;
66+
use Symfony\Component\Messenger\Transport\TransportFactoryInterface;
6867
use Symfony\Component\Messenger\Transport\TransportInterface;
6968
use Symfony\Component\PropertyAccess\PropertyAccessor;
7069
use Symfony\Component\PropertyInfo\PropertyAccessExtractorInterface;
@@ -343,12 +342,10 @@ public function load(array $configs, ContainerBuilder $container)
343342
->addTag('validator.constraint_validator');
344343
$container->registerForAutoconfiguration(ObjectInitializerInterface::class)
345344
->addTag('validator.initializer');
346-
$container->registerForAutoconfiguration(ReceiverInterface::class)
347-
->addTag('messenger.receiver');
348-
$container->registerForAutoconfiguration(SenderInterface::class)
349-
->addTag('messenger.sender');
350345
$container->registerForAutoconfiguration(MessageHandlerInterface::class)
351346
->addTag('messenger.message_handler');
347+
$container->registerForAutoconfiguration(TransportFactoryInterface::class)
348+
->addTag('messenger.transport_factory');
352349

353350
if (!$container->getParameter('kernel.debug')) {
354351
// remove tagged iterator argument for resource checkers
@@ -573,10 +570,10 @@ private function registerWorkflowConfiguration(array $config, ContainerBuilder $
573570
foreach ($workflow['supports'] as $supportedClassName) {
574571
$strategyDefinition = new Definition(Workflow\SupportStrategy\InstanceOfSupportStrategy::class, array($supportedClassName));
575572
$strategyDefinition->setPublic(false);
576-
$registryDefinition->addMethodCall('add', array(new Reference($workflowId), $strategyDefinition));
573+
$registryDefinition->addMethodCall('addWorkflow', array(new Reference($workflowId), $strategyDefinition));
577574
}
578575
} elseif (isset($workflow['support_strategy'])) {
579-
$registryDefinition->addMethodCall('add', array(new Reference($workflowId), new Reference($workflow['support_strategy'])));
576+
$registryDefinition->addMethodCall('addWorkflow', array(new Reference($workflowId), new Reference($workflow['support_strategy'])));
580577
}
581578

582579
// Enable the AuditTrail
@@ -1471,12 +1468,17 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
14711468
$config['default_bus'] = key($config['buses']);
14721469
}
14731470

1474-
$defaultMiddleware = array('before' => array('logging'), 'after' => array('route_messages', 'call_message_handler'));
1471+
$defaultMiddleware = array(
1472+
'before' => array(array('id' => 'logging')),
1473+
'after' => array(array('id' => 'route_messages'), array('id' => 'call_message_handler')),
1474+
);
14751475
foreach ($config['buses'] as $busId => $bus) {
14761476
$middleware = $bus['default_middleware'] ? array_merge($defaultMiddleware['before'], $bus['middleware'], $defaultMiddleware['after']) : $bus['middleware'];
14771477

1478-
if (!$validationConfig['enabled'] && \in_array('messenger.middleware.validation', $middleware, true)) {
1479-
throw new LogicException('The Validation middleware is only available when the Validator component is installed and enabled. Try running "composer require symfony/validator".');
1478+
foreach ($middleware as $middlewareItem) {
1479+
if (!$validationConfig['enabled'] && 'messenger.middleware.validation' === $middlewareItem['id']) {
1480+
throw new LogicException('The Validation middleware is only available when the Validator component is installed and enabled. Try running "composer require symfony/validator".');
1481+
}
14801482
}
14811483

14821484
$container->setParameter($busId.'.middleware', $middleware);
@@ -1511,8 +1513,8 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
15111513
$transportDefinition = (new Definition(TransportInterface::class))
15121514
->setFactory(array(new Reference('messenger.transport_factory'), 'createTransport'))
15131515
->setArguments(array($transport['dsn'], $transport['options']))
1514-
->addTag('messenger.receiver', array('name' => $name))
1515-
->addTag('messenger.sender', array('name' => $name))
1516+
->addTag('messenger.receiver', array('alias' => $name))
1517+
->addTag('messenger.sender', array('alias' => $name))
15161518
;
15171519
$container->setDefinition('messenger.transport.'.$name, $transportDefinition);
15181520
}

src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -391,9 +391,16 @@
391391

392392
<xsd:complexType name="messenger_bus">
393393
<xsd:sequence>
394-
<xsd:element name="middleware" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
394+
<xsd:element name="middleware" type="messenger_middleware" minOccurs="0" maxOccurs="unbounded" />
395395
</xsd:sequence>
396396
<xsd:attribute name="name" type="xsd:string" use="required"/>
397397
<xsd:attribute name="default-middleware" type="xsd:boolean"/>
398398
</xsd:complexType>
399+
400+
<xsd:complexType name="messenger_middleware">
401+
<xsd:sequence>
402+
<xsd:element name="argument" type="xsd:anyType" minOccurs="0" maxOccurs="unbounded" />
403+
</xsd:sequence>
404+
<xsd:attribute name="id" type="xsd:string" use="required"/>
405+
</xsd:complexType>
399406
</xsd:schema>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
$container->loadFromExtension('framework', array(
4+
'messenger' => array(
5+
'buses' => array(
6+
'command_bus' => array(
7+
'middleware' => array(
8+
array(
9+
'foo' => array('qux'),
10+
'bar' => array('baz'),
11+
),
12+
),
13+
),
14+
),
15+
),
16+
));

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_multiple_buses.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
'messenger.bus.commands' => null,
88
'messenger.bus.events' => array(
99
'middleware' => array(
10+
array('with_factory' => array('foo', true, array('bar' => 'baz'))),
1011
'allow_no_handler',
1112
),
1213
),

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_multiple_buses.xml

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,19 @@
99
<framework:messenger default-bus="messenger.bus.commands">
1010
<framework:bus name="messenger.bus.commands" />
1111
<framework:bus name="messenger.bus.events">
12-
<framework:middleware>allow_no_handler</framework:middleware>
12+
<framework:middleware id="with_factory">
13+
<framework:argument>foo</framework:argument>
14+
<framework:argument>true</framework:argument>
15+
<framework:argument>
16+
<framework:bar>baz</framework:bar>
17+
</framework:argument>
18+
</framework:middleware>
19+
<framework:middleware id="allow_no_handler" />
1320
</framework:bus>
1421
<framework:bus name="messenger.bus.queries" default-middleware="false">
15-
<framework:middleware>route_messages</framework:middleware>
16-
<framework:middleware>allow_no_handler</framework:middleware>
17-
<framework:middleware>call_message_handler</framework:middleware>
22+
<framework:middleware id="route_messages" />
23+
<framework:middleware id="allow_no_handler" />
24+
<framework:middleware id="call_message_handler" />
1825
</framework:bus>
1926
</framework:messenger>
2027
</framework:config>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
framework:
2+
messenger:
3+
buses:
4+
command_bus:
5+
middleware:
6+
- foo: ['qux']
7+
bar: ['baz']

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_multiple_buses.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ framework:
55
messenger.bus.commands: ~
66
messenger.bus.events:
77
middleware:
10000
8+
- with_factory: [foo, true, { bar: baz }]
89
- "allow_no_handler"
910
messenger.bus.queries:
1011
default_middleware: false

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
use Symfony\Component\HttpKernel\DependencyInjection\LoggerPass;
3737
use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage;
3838
use Symfony\Component\Messenger\Tests\Fixtures\SecondMessage;
39+
use Symfony\Component\Messenger\Transport\TransportFactory;
3940
use Symfony\Component\PropertyAccess\PropertyAccessor;
4041
use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader;
4142
use Symfony\Component\Serializer\Normalizer\DateIntervalNormalizer;
@@ -528,6 +529,8 @@ public function testMessenger()
528529
$container = $this->createContainerFromFile('messenger');
529530
$this->assertTrue($container->hasAlias('message_bus'));
530531
$this->assertFalse($container->hasDefinition('messenger.transport.amqp.factory'));
532+
$this->assertTrue($container->hasDefinition('messenger.transport_factory'));
533+
$this->assertSame(TransportFactory::class, $container->getDefinition('messenger.transport_factory')->getClass());
531534
}
532535

533536
public function testMessengerTransports()
@@ -536,8 +539,8 @@ public function testMessengerTransports()
536539
$this->assertTrue($container->hasDefinition('messenger.transport.default'));
537540
$this->assertTrue($container->getDefinition('messenger.transport.default')->hasTag('messenger.receiver'));
538541
$this->assertTrue($container->getDefinition('messenger.transport.default')->hasTag('messenger.sender'));
539-
$this->assertEquals(array(array('name' => 'default')), $container->getDefinition('messenger.transport.default')->getTag('messenger.receiver'));
540-
$this->assertEquals(array(array('name' => 'default')), $container->getDefinition('messenger.transport.default')->getTag('messenger.sender'));
542+
$this->assertEquals(array(array('alias' => 'default')), $container->getDefinition('messenger.transport.default')->getTag('messenger.receiver'));
543+
$this->assertEquals(array(array('alias' => 'default')), $container->getDefinition('messenger.transport.default')->getTag('messenger.sender'));
541544

542545
$this->assertTrue($con 10000 tainer->hasDefinition('messenger.transport.customised'));
543546
$transportFactory = $container->getDefinition('messenger.transport.customised')->getFactory();
@@ -601,18 +604,41 @@ public function testMessengerWithMultipleBuses()
601604

602605
$this->assertTrue($container->has('messenger.bus.commands'));
603606
$this->assertSame(array(), $container->getDefinition('messenger.bus.commands')->getArgument(0));
604-
$this->assertEquals(array('logging', 'route_messages', 'call_message_handler'), $container->getParameter('messenger.bus.commands.middleware'));
607+
$this->assertEquals(array(
608+
array('id' => 'logging'),
609+
array('id' => 'route_messages'),
610+
array('id' => 'call_message_handler'),
611+
), $container->getParameter('messenger.bus.commands.middleware'));
605612
$this->assertTrue($container->has('messenger.bus.events'));
606613
$this->assertSame(array(), $container->getDefinition('messenger.bus.events')->getArgument(0));
607-
$this->assertEquals(array('logging', 'allow_no_handler', 'route_messages', 'call_message_handler'), $container->getParameter('messenger.bus.events.middleware'));
614+
$this->assertEquals(array(
615+
array('id' => 'logging'),
616+
array('id' => 'with_factory', 'arguments' => array('foo', true, array('bar' => 'baz'))),
617+
array('id' => 'allow_no_handler', 'arguments' => array()),
618+
array('id' => 'route_messages'),
619+
array('id' => 'call_message_handler'),
620+
), $container->getParameter('messenger.bus.events.middleware'));
608621
$this->assertTrue($container->has('messenger.bus.queries'));
609622
$this->assertSame(array(), $container->getDefinition('messenger.bus.queries')->getArgument(0));
610-
$this->assertEquals(array('route_messages', 'allow_no_handler', 'call_message_handler'), $container->getParameter('messenger.bus.queries.middleware'));
623+
$this->assertEquals(array(
624+
array('id' => 'route_messages', 'arguments' => array()),
625+
array('id' => 'allow_no_handler', 'arguments' => array()),
626+
array('id' => 'call_message_handler', 'arguments' => array()),
627+
), $container->getParameter('messenger.bus.queries.middleware'));
611628

612629
$this->assertTrue($container->hasAlias('message_bus'));
613630
$this->assertSame('messenger.bus.commands', (string) $container->getAlias('message_bus'));
614631
}
615632

633+
/**
634+
* @expectedException \InvalidArgumentException
635+
* @expectedExceptionMessage There is an error at path "framework.messenger" in one of the buses middleware definitions: expected a single entry for a middleware item config, with factory id as key and arguments as value. Got "{"foo":["qux"],"bar":["baz"]}"
636+
*/
637+
public function testMessengerMiddlewareFactoryErroneousFormat()
638+
{
639+
$this->createContainerFromFile('messenger_middleware_factory_erroneous_format');
640+
}
641+
616642
public function testTranslator()
617643
{
618644
$container = $this->createContainerFromFile('full');

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/XmlFrameworkExtensionTest.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,9 @@ public function testAssetsHelperIsRemovedWhenPhpTemplatingEngineIsEnabledAndAsse
2727
{
2828
$this->markTestSkipped('The assets key cannot be set to false using the XML configuration format.');
2929
}
30+
31+
public function testMessengerMiddlewareFactoryErroneousFormat()
32+
{
33+
$this->markTestSkipped('XML configuration will not allow eeroneous format.');
34+
}
3035
}

src/Symfony/Bundle/FrameworkBundle/composer.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
"symfony/templating": "~3.4|~4.0",
5252
"symfony/validator": "^4.1",
5353
"symfony/var-dumper": "~3.4|~4.0",
54-
"symfony/workflow": "~3.4|~4.0",
54+
"symfony/workflow": "^4.1",
5555
"symfony/yaml": "~3.4|~4.0",
5656
"symfony/property-info": "~3.4|~4.0",
5757
"symfony/lock": "~3.4|~4.0",
@@ -72,7 +72,7 @@
7272
"symfony/stopwatch": "<3.4",
7373
"symfony/translation": "<3.4",
7474
"symfony/validator": "<4.1",
75-
"symfony/workflow": "<3.4"
75+
"symfony/workflow": "<4.1"
7676
},
7777
"suggest": {
7878
"ext-apcu": "For best performance of the system caches",

0 commit comments

Comments
 (0)
0