Symfony, конфиг и символ '%'

Есть такой инжект параметров в конструктор:

/**
 * AlfaBankService constructor.
 *
 * @param string $username
 * @param string $password
 * @param string $gatewayUrl
 * @param string $description
 * @param string $successUrl
 * @param string $failUrl
 * @param bool $isTest
 *
 * @DI\InjectParams({
 *     "username" = @DI\Inject("%alfabank.username%"),
 *     "password" = @DI\Inject("%alfabank.password%"),
 *     "gatewayUrl" = @DI\Inject("%alfabank.gatewayUrl%"),
 *     "description" = @DI\Inject("%alfabank.description%"),
 *     "successUrl" = @DI\Inject("%alfabank.successUrl%"),
 *     "failUrl" = @DI\Inject("%alfabank.failUrl%"),
 *     "isTest" = @DI\Inject("%alfabank.isTest%")
 * })
 */
public function __construct(...){...}

Часто бывает нужно чтобы параметр, который прописан в конфиге, содержал плейсхолдеры для функции sprintf вида %s или %d, например:

https://example.com/?orderId=%d

И в таком случае все нормально работает. Но стоит сюда добавить еще один плейсхолдер, как симфони падает с ошибкой:

[Symfony\\Component\\DependencyInjection\\Exception\\ParameterNotFoundException]
The service "some.service" has a dependency on a non-existent parameter

Сходу понятно, что что дело в символе “%”, но как его экранировать?

А решение очень простое(и документированное), но его поиск может занять чуть больше времени чем требуется:

https://example.com/?orderId=%%d&transId=%%d

В первом примере, кстати, несмотря на то, что работают оба варианта, правильно будет написать так:

 https://example.com/?orderId=%%d

Комментарии

comments powered by Disqus