Conversation
📝 WalkthroughWalkthroughConvert PayumBundle service configuration from XML to PHP: replace XmlFileLoader with PhpFileLoader in the bundle extension, add new PHP service config files (many under Resources/config and subfolders), remove corresponding XML files, and add Changes
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
❌ Preview Environment deleted from BunnyshellAvailable commands:
|
0e16df0 to
41f3620
Compare
|
|
||
| return static function (ContainerConfigurator $container) { | ||
| $services = $container->services(); | ||
| $parameters = $container->parameters(); |
There was a problem hiding this comment.
| $parameters = $container->parameters(); |
| $services = $container->services(); | ||
| $parameters = $container->parameters(); | ||
| $container->import('sylius_shop/**/*.php'); |
There was a problem hiding this comment.
| $services = $container->services(); | |
| $parameters = $container->parameters(); | |
| $container->import('sylius_shop/**/*.php'); | |
| $container->import('sylius_shop/**/*.php'); |
| $services = $container->services(); | ||
| $parameters = $container->parameters(); | ||
|
|
||
| $services->defaults() | ||
| ->public(); |
There was a problem hiding this comment.
| $services = $container->services(); | |
| $parameters = $container->parameters(); | |
| $services->defaults() | |
| ->public(); | |
| $services = $container->services(); | |
| $services->defaults()->public(); |
|
|
||
| return static function (ContainerConfigurator $container) { | ||
| $services = $container->services(); | ||
| $parameters = $container->parameters(); |
There was a problem hiding this comment.
| $parameters = $container->parameters(); |
|
|
||
| return static function (ContainerConfigurator $container) { | ||
| $services = $container->services(); | ||
| $parameters = $container->parameters(); |
There was a problem hiding this comment.
| $parameters = $container->parameters(); |
and it other places where unused
| $parameters = $container->parameters(); | ||
|
|
||
| $services->set('sylius_payum.factory.get_status', GetStatusFactory::class); | ||
|
|
||
| $services->alias(GetStatusFactoryInterface::class, 'sylius_payum.factory.get_status'); | ||
|
|
||
| $services->set('sylius_payum.factory.resolve_next_route', ResolveNextRouteFactory::class); | ||
|
|
||
| $services->alias(ResolveNextRouteFactoryInterface::class, 'sylius_payum.factory.resolve_next_route'); | ||
|
|
||
| $services->set('sylius_payum.factory.capture', CaptureFactory::class); | ||
|
|
||
| $services->set('sylius_payum.factory.authorize', AuthorizeFactory::class); |
There was a problem hiding this comment.
| $parameters = $container->parameters(); | |
| $services->set('sylius_payum.factory.get_status', GetStatusFactory::class); | |
| $services->alias(GetStatusFactoryInterface::class, 'sylius_payum.factory.get_status'); | |
| $services->set('sylius_payum.factory.resolve_next_route', ResolveNextRouteFactory::class); | |
| $services->alias(ResolveNextRouteFactoryInterface::class, 'sylius_payum.factory.resolve_next_route'); | |
| $services->set('sylius_payum.factory.capture', CaptureFactory::class); | |
| $services->set('sylius_payum.factory.authorize', AuthorizeFactory::class); | |
| $services->set('sylius_payum.factory.get_status', GetStatusFactory::class); | |
| $services->alias(GetStatusFactoryInterface::class, 'sylius_payum.factory.get_status'); | |
| $services->set('sylius_payum.factory.resolve_next_route', ResolveNextRouteFactory::class); | |
| $services->alias(ResolveNextRouteFactoryInterface::class, 'sylius_payum.factory.resolve_next_route'); | |
| $services->set('sylius_payum.factory.capture', CaptureFactory::class); | |
| $services->set('sylius_payum.factory.authorize', AuthorizeFactory::class); |
|
|
||
| return static function (ContainerConfigurator $container) { | ||
| $services = $container->services(); | ||
| $parameters = $container->parameters(); |
There was a problem hiding this comment.
| $parameters = $container->parameters(); |
|
|
||
| return static function (ContainerConfigurator $container) { | ||
| $services = $container->services(); | ||
| $parameters = $container->parameters(); |
There was a problem hiding this comment.
| $parameters = $container->parameters(); |
| $services = $container->services(); | ||
| $parameters = $container->parameters(); | ||
| $container->import('services/**.php'); | ||
| $container->import('services/payment_request/**/*.php'); | ||
|
|
||
| $services->set('sylius_payum.http_client', HttpClient::class) | ||
| ->args([service(ClientInterface::class)]); |
There was a problem hiding this comment.
| $services = $container->services(); | |
| $parameters = $container->parameters(); | |
| $container->import('services/**.php'); | |
| $container->import('services/payment_request/**/*.php'); | |
| $services->set('sylius_payum.http_client', HttpClient::class) | |
| ->args([service(ClientInterface::class)]); | |
| $container->import('services/**.php'); | |
| $container->import('services/payment_request/**/*.php'); | |
| $services = $container->services(); | |
| $services->set('sylius_payum.http_client', HttpClient::class)->args([service(ClientInterface::class)]); |
|
|
||
| return static function (ContainerConfigurator $container) { | ||
| $services = $container->services(); | ||
| $parameters = $container->parameters(); |
There was a problem hiding this comment.
| $parameters = $container->parameters(); |
69d8f7a to
3835d44
Compare
3835d44 to
f4d1955
Compare
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Fix all issues with AI agents
In
`@src/Sylius/Bundle/PayumBundle/Resources/config/services/payment_request/command_handler.php`:
- Around line 23-24: The closure returned by the factory lacks an explicit
return type; update the anonymous function signature that currently reads
"static function (ContainerConfigurator $container)" to include an explicit ":
void" return type (i.e., "static function (ContainerConfigurator $container):
void") so the configurator closure declares its return type; this affects the
closure that defines $services via $container->services() in the payment_request
command handler.
- Around line 36-44: The child service definitions for
'sylius_payum.command_handler.payment_request.token.capture' and '.authorize'
replace all inherited constructor arguments by calling ->args([...]) causing
missing dependencies; change these to use ->arg(index,
service('sylius_payum.factory.capture')) and ->arg(index,
service('sylius_payum.factory.authorize')) respectively (use the correct index
where the factory parameter is expected in the parent definition) so the factory
service is injected in addition to the parent args required by the token
handlers that handle CapturePaymentRequest::class and
AuthorizePaymentRequest::class.
| return static function (ContainerConfigurator $container) { | ||
| $services = $container->services(); |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
cat -n src/Sylius/Bundle/PayumBundle/Resources/config/services/payment_request/command_handler.phpRepository: Sylius/Sylius
Length of output: 3686
Add an explicit void return type to the configurator closure.
The closure accepts a typed argument but lacks a return type declaration. Add : void to align with the type-declaration requirement for all PHP return values.
Proposed fix
-return static function (ContainerConfigurator $container) {
+return static function (ContainerConfigurator $container): void {📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| return static function (ContainerConfigurator $container) { | |
| $services = $container->services(); | |
| return static function (ContainerConfigurator $container): void { | |
| $services = $container->services(); |
🤖 Prompt for AI Agents
In
`@src/Sylius/Bundle/PayumBundle/Resources/config/services/payment_request/command_handler.php`
around lines 23 - 24, The closure returned by the factory lacks an explicit
return type; update the anonymous function signature that currently reads
"static function (ContainerConfigurator $container)" to include an explicit ":
void" return type (i.e., "static function (ContainerConfigurator $container):
void") so the configurator closure declares its return type; this affects the
closure that defines $services via $container->services() in the payment_request
command handler.
| $services->set('sylius_payum.command_handler.payment_request.token.capture') | ||
| ->parent('sylius_payum.command_handler.payment_request.token') | ||
| ->args([service('sylius_payum.factory.capture')]) | ||
| ->tag('messenger.message_handler', ['bus' => 'sylius.payment_request.command_bus', 'handles' => CapturePaymentRequest::class]); | ||
|
|
||
| $services->set('sylius_payum.command_handler.payment_request.token.authorize') | ||
| ->parent('sylius_payum.command_handler.payment_request.token') | ||
| ->args([service('sylius_payum.factory.authorize')]) | ||
| ->tag('messenger.message_handler', ['bus' => 'sylius.payment_request.command_bus', 'handles' => AuthorizePaymentRequest::class]); |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Find the handler classes mentioned in the DI config
find . -type f -name "*PaymentRequestHandler.php" | head -20Repository: Sylius/Sylius
Length of output: 685
🏁 Script executed:
#!/bin/bash
# List the file we're reviewing
cat -n src/Sylius/Bundle/PayumBundle/Resources/config/services/payment_request/command_handler.phpRepository: Sylius/Sylius
Length of output: 3686
🏁 Script executed:
#!/bin/bash
# Extract TokenPaymentRequestHandler constructor
rg -nP "__construct\s*\(" ./src/Sylius/Bundle/PayumBundle/PaymentRequest/CommandHandler/TokenPaymentRequestHandler.php -C 10Repository: Sylius/Sylius
Length of output: 1172
🏁 Script executed:
#!/bin/bash
# Extract ModelPaymentRequestHandler constructor
rg -nP "__construct\s*\(" ./src/Sylius/Bundle/PayumBundle/PaymentRequest/CommandHandler/ModelPaymentRequestHandler.php -C 10Repository: Sylius/Sylius
Length of output: 1032
🏁 Script executed:
#!/bin/bash
# Check if TokenPaymentRequestHandler uses the payumRequestFactory parameter
rg -nP "payumRequestFactory|requestFactory" ./src/Sylius/Bundle/PayumBundle/PaymentRequest/CommandHandler/TokenPaymentRequestHandler.php -C 2Repository: Sylius/Sylius
Length of output: 508
🏁 Script executed:
#!/bin/bash
# Check if ModelPaymentRequestHandler uses the factory parameter
rg -nP "factory" ./src/Sylius/Bundle/PayumBundle/PaymentRequest/CommandHandler/ModelPaymentRequestHandler.php -C 2Repository: Sylius/Sylius
Length of output: 474
Child ->args() overrides parent arguments entirely; use indexed ->arg() to append factory services.
In Symfony DI, calling ->args([service(...)]) on a child service replaces all inherited parent arguments. The current code would pass only the factory service to constructors expecting 6 arguments (token handlers) or 4 arguments (model handlers), causing instantiation failures since the factory parameter is actively used ($this->payumRequestFactory->createNewWithToken() and $this->factory->createNewWithModel()). Use ->arg(index, service(...)) instead:
Suggested fix
$services->set('sylius_payum.command_handler.payment_request.token.capture')
->parent('sylius_payum.command_handler.payment_request.token')
- ->args([service('sylius_payum.factory.capture')])
+ ->arg(5, service('sylius_payum.factory.capture'))
->tag('messenger.message_handler', ['bus' => 'sylius.payment_request.command_bus', 'handles' => CapturePaymentRequest::class]);
$services->set('sylius_payum.command_handler.payment_request.token.authorize')
->parent('sylius_payum.command_handler.payment_request.token')
- ->args([service('sylius_payum.factory.authorize')])
+ ->arg(5, service('sylius_payum.factory.authorize'))
->tag('messenger.message_handler', ['bus' => 'sylius.payment_request.command_bus', 'handles' => AuthorizePaymentRequest::class]);
$services->set('sylius_payum.command_handler.payment_request.model.status')
->parent('sylius_payum.command_handler.payment_request.model')
- ->args([service('sylius_payum.factory.get_status')])
+ ->arg(3, service('sylius_payum.factory.get_status'))
->tag('messenger.message_handler', ['bus' => 'sylius.payment_request.command_bus', 'handles' => StatusPaymentRequest::class]);
$services->set('sylius_payum.command_handler.payment_request.model.notify')
->parent('sylius_payum.command_handler.payment_request.model')
- ->args([service('sylius_payum.factory.get_status')])
+ ->arg(3, service('sylius_payum.factory.get_status'))
->tag('messenger.message_handler', ['bus' => 'sylius.payment_request.command_bus', 'handles' => NotifyPaymentRequest::class]);🤖 Prompt for AI Agents
In
`@src/Sylius/Bundle/PayumBundle/Resources/config/services/payment_request/command_handler.php`
around lines 36 - 44, The child service definitions for
'sylius_payum.command_handler.payment_request.token.capture' and '.authorize'
replace all inherited constructor arguments by calling ->args([...]) causing
missing dependencies; change these to use ->arg(index,
service('sylius_payum.factory.capture')) and ->arg(index,
service('sylius_payum.factory.authorize')) respectively (use the correct index
where the factory parameter is expected in the parent definition) so the factory
service is injected in addition to the parent args required by the token
handlers that handle CapturePaymentRequest::class and
AuthorizePaymentRequest::class.
Summary by CodeRabbit
Chores
New Features
Style