Я занят переносом стороннего пакета с Symfony 3 на Symfony 4. У меня есть собственный сервис внутри этого пакета.Давайте назовем это MyService:
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\Security\Core\User\UserCheckerInterface;
class MyService
{
private $params;
private $userChecker;
function __construct( ParameterBagInterface $params,
UserCheckerInterface $userChecker )
{
$this->params = $params;
$this->userChecker = $userChecker;
}
// ...
}
У меня проблемы со второй инъекцией 'UserCheckerInterface', которая должна внедрить другую контейнерную службу в зависимости от конфигурации моего пакета .
MyBundle /DependencyInjection / Configuration.php:
class Configuration implements ConfigurationInterface
{
/**
* {@inheritdoc}
*/
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('fbeen_user');
$rootNode
->children()
->scalarNode('user_checker')->defaultValue('@security.user_checker.main')->end()
->end()
;
return $treeBuilder;
}
}
И, наконец, внутри моего пакета services.yaml:
services:
_defaults:
bind:
$userChecker: '@security.user_checker.main'
my_bundle.my_service:
class: MyCompany\MyBundle\Service\MyService
arguments: ['@parameter_bag']
public: true
Это работает, но если я переместу раздел _defaults: bind из службы пакета.yaml к основному service.yaml вне стороннего пакета, чем это не так.Это означает, что любой, кто использует мой сторонний пакет, все еще не может использовать другой userChecker.Я пробовал что-то вроде:
services:
_defaults:
bind:
$userChecker: '@%mycompany_mybundle.user_checker%'
, но в качестве результата вместо строки выдается строка.У кого-нибудь есть подсказка для меня?