Вот пример того, как можно решить проблему такого рода при работе с пакетами, которые не совсем готовы к автоматической передаче.
Начните с установки тестового проекта:
symfony new --full stash --version=lts
composer require tedivm/stash-bundle
Примечание что связка напрямую не поддерживает Symfony 5, следовательно, lts. Также обратите внимание, что пакеты не поддерживают Flex, поэтому вы должны добавить свой собственный файл config / packages / sta sh .yaml для файла readme пакета.
# config/packages/stash.yaml
stash:
drivers: [ FileSystem ]
FileSystem: ~
На этом этапе мы можем определить, какая служба нам нужно ввести:
bin/console debug:container stash
Information for Service "stash.default_cache"
=============================================
Class CacheService
---------------- -----------------------------------------
Option Value
---------------- -----------------------------------------
Service ID stash.default_cache
Class Tedivm\StashBundle\Service\CacheService
Большую часть времени вы хотели бы использовать интерфейс для внедрения, но взгляд на исходный код показывает, что пакет не использует интерфейсы. Как примечание, называть стороннюю службу «sta sh» не очень хорошая идея. Это действительно должно было быть 'tedivm.sta sh', но я отвлекся.
Теперь мы можем создать псевдоним и напечатать на него:
# config/services.yaml
Tedivm\StashBundle\Service\CacheService : '@stash' # alias for typehinting
# Controller class
public function index(CacheService $cacheService)
{
return new Response('Cache ' . get_class($cacheService));
}
И это должно сработать.