Когда я в бандле делаю Интерфейс, затем делаю абстрактный класс с реализацией и применяю к нему этот интерфейс, а потом создаю дочерний наследуя это абстрактный класс, Симфони ругается, что не может найти кандидата, и просит объявить алиас для этого интерфейса явно.
Но ведь инстанс от абстрактного класса не должен создаваться в принципе. И реализация интерфейса в таком случае только одна. Ошибки же быть не должно было.
---
services.yaml
services:
_defaults:
autowire: true
autoconfigure: true
Vendor\SomeBundle\:
resource: '../src/*'
exclude: '../src/{DependencyInjection,Entity,Examples,Repository,Message}'
Vendor\SomeBundle\Controller\:
resource: '../src/Controller'
tags: ['controller.service_arguments']
Vendor\SomeBundle\Controller\TokenController:
autowire: false
Вот. Я отключил для него
autowire. Но затем пробую в тестах включить, как описал выше. И оно не работает даже в таком виде
services_test.yaml
services:
_defaults:
autowire: true
autoconfigure: true
public: true
Vendor\SomeBundle\Controller\SomeController:
autowire: true
arguments:
$authenticator: Vendor\SomeBundle\Examples\Authenticator
Vendor\SomeBundle\Examples\Authenticator:
calls:
- setIdentityClassName: ...
Cannot autowire service "Vendor\SomeBundle\Controller\SomeController": argument "$authenticator" of method "__construct()" references interface "Vendor\SomeBundle\S
ervices\AuthenticatorInterface" but no such service exists. You should maybe alias this interface to the existing "Vendor\SomeBundle\Examples\Authenticator" service.
Папку с кэшем удаляю и следом команду очистки кэша запускаю.
Начитает работать только после
services_test.yaml
Vendor\SomeBundle\Services\AuthenticatorInterface:
'@Vendor\SomeBundle\Examples\Authenticator'
При этом только одна реализация интерфейса
interface AuthenticatorInterface {}
abstract class AbstractAuthenticator implements AuthenticatorInterface {}
class Authenticator extends AbstractAuthenticator {}