You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException:
You have requested a non-existent parameter "s".
at var/cache/dev/ContainerMAWqtVy/App_KernelDevDebugContainer.php:1841
at ContainerMAWqtVy\App_KernelDevDebugContainer->getParameter()
(var/cache/dev/ContainerMAWqtVy/getShouterService.php:22)
at ContainerMAWqtVy\getShouterService::do()
(var/cache/dev/ContainerMAWqtVy/App_KernelDevDebugContainer.php:417)
at ContainerMAWqtVy\App_KernelDevDebugContainer->load()
(vendor/symfony/dependency-injection/Container.php:382)
at Symfony\Component\DependencyInjection\Container->getService()
(vendor/symfony/dependency-injection/Argument/ServiceLocator.php:40)
at Symfony\Component\DependencyInjection\Argument\ServiceLocator->get()
(vendor/symfony/http-kernel/Controller/ArgumentResolver/ServiceValueResolver.php:84)
at Symfony\Component\HttpKernel\Controller\ArgumentResolver\ServiceValueResolver->resolve()
(vendor/symfony/http-kernel/Controller/ArgumentResolver/TraceableValueResolver.php:60)
at Symfony\Component\HttpKernel\Controller\ArgumentResolver\TraceableValueResolver->resolve()
(vendor/symfony/http-kernel/Controller/ArgumentResolver.php:54)
at Symfony\Component\HttpKernel\Controller\ArgumentResolver->getArguments()
(vendor/symfony/http-kernel/Controller/TraceableArgumentResolver.php:40)
at Symfony\Component\HttpKernel\Controller\TraceableArgumentResolver->getArguments()
(vendor/symfony/http-kernel/HttpKernel.php:155)
at Symfony\Component\HttpKernel\HttpKernel->handleRaw()
(vendor/symfony/http-kernel/HttpKernel.php:74)
at Symfony\Component\HttpKernel\HttpKernel->handle()
(vendor/symfony/http-kernel/Kernel.php:184)
at Symfony\Component\HttpKernel\Kernel->handle()
(vendor/symfony/runtime/Runner/Symfony/HttpKernelRunner.php:35)
at Symfony\Component\Runtime\Runner\Symfony\HttpKernelRunner->run()
(vendor/autoload_runtime.php:29)
at require_once('/home/xxx/projects/php/symfony_sandbox/vendor/autoload_runtime.php')
(public/index.php:5)
Compiled container
I think **''.$container->getParameter('s').'s',** is not something we expect to see here.
<?phpnamespaceContainerMAWqtVy;
useSymfony\Component\DependencyInjection\Argument\RewindableGenerator;
useSymfony\Component\DependencyInjection\Exception\RuntimeException;
/** * @internal This class has been auto-generated by the Symfony Dependency Injection Component. */class getShouterService extends App_KernelDevDebugContainer
{
/** * Gets the private 'shouter' shared autowired service. * * @return \App\Service\Shouter */publicstaticfunctiondo($container, $lazyLoad = true)
{
include_once\dirname(__DIR__, 4).'/src/Service/Shouter.php';
return$container->privates['shouter'] = new \App\Service\Shouter(''.$container->getParameter('s').'s', '!');
}
}
Possible Solution
No response
Additional Context
If we set the 1st optional parameter explicitly, then everything works fine. However, when a service has a lot of optional parameters it becomes cumbersome.
In case when we have access to that service we could write optional parameters in the way how '%' is escaped in the config i.e. with double '%%' private readonly string $format = '%%s%%s', but this won't help with 3rd party libraries:
…lt values (MatTheCat)
This PR was merged into the 5.4 branch.
Discussion
----------
[DependencyInjection] Escape `%` from parameter-like default values
| Q | A
| ------------- | ---
| Branch? | 5.4
| Bug fix? | yes
| New feature? | no
| Deprecations? | no
| Tickets | Fix#50469
| License | MIT
| Doc PR | N/A
When string default values are autowired, they shouldn’t reference parameters.
This PR tries to address the issue by escaping them in the `AutowirePass`.
Commits
-------
bb4eeb0 [DependencyInjection] Escape `%` from parameter-like default values
Symfony version(s) affected
6.2.11
Description
The ParameterNotFoundException exception is thrown when:
~src/config/service.yaml
.How to reproduce
Stack Trace
Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException:
You have requested a non-existent parameter "s".
at var/cache/dev/ContainerMAWqtVy/App_KernelDevDebugContainer.php:1841
at ContainerMAWqtVy\App_KernelDevDebugContainer->getParameter()
(var/cache/dev/ContainerMAWqtVy/getShouterService.php:22)
at ContainerMAWqtVy\getShouterService::do()
(var/cache/dev/ContainerMAWqtVy/App_KernelDevDebugContainer.php:417)
at ContainerMAWqtVy\App_KernelDevDebugContainer->load()
(vendor/symfony/dependency-injection/Container.php:382)
at Symfony\Component\DependencyInjection\Container->getService()
(vendor/symfony/dependency-injection/Argument/ServiceLocator.php:40)
at Symfony\Component\DependencyInjection\Argument\ServiceLocator->get()
(vendor/symfony/http-kernel/Controller/ArgumentResolver/ServiceValueResolver.php:84)
at Symfony\Component\HttpKernel\Controller\ArgumentResolver\ServiceValueResolver->resolve()
(vendor/symfony/http-kernel/Controller/ArgumentResolver/TraceableValueResolver.php:60)
at Symfony\Component\HttpKernel\Controller\ArgumentResolver\TraceableValueResolver->resolve()
(vendor/symfony/http-kernel/Controller/ArgumentResolver.php:54)
at Symfony\Component\HttpKernel\Controller\ArgumentResolver->getArguments()
(vendor/symfony/http-kernel/Controller/TraceableArgumentResolver.php:40)
at Symfony\Component\HttpKernel\Controller\TraceableArgumentResolver->getArguments()
(vendor/symfony/http-kernel/HttpKernel.php:155)
at Symfony\Component\HttpKernel\HttpKernel->handleRaw()
(vendor/symfony/http-kernel/HttpKernel.php:74)
at Symfony\Component\HttpKernel\HttpKernel->handle()
(vendor/symfony/http-kernel/Kernel.php:184)
at Symfony\Component\HttpKernel\Kernel->handle()
(vendor/symfony/runtime/Runner/Symfony/HttpKernelRunner.php:35)
at Symfony\Component\Runtime\Runner\Symfony\HttpKernelRunner->run()
(vendor/autoload_runtime.php:29)
at require_once('/home/xxx/projects/php/symfony_sandbox/vendor/autoload_runtime.php')
(public/index.php:5)
Compiled container
I think **''.$container->getParameter('s').'s',** is not something we expect to see here.Possible Solution
No response
Additional Context
If we set the 1st optional parameter explicitly, then everything works fine. However, when a service has a lot of optional parameters it becomes cumbersome.
In case when we have access to that service we could write optional parameters in the way how '%' is escaped in the config i.e. with double '%%'
private readonly string $format = '%%s%%s'
, but this won't help with 3rd party libraries:The text was updated successfully, but these errors were encountered: