Так что этот метод, как вы разместили выше:
public function getRepository($repository){
$repo = $this->get($repository);
if($this->authRepository !== null) {
$repo->setPrefix($this->authRepository);
}
return $repo;
}
Может быть реализовано так с новым DependecyInjection:
class TestController extends AbstractController
{
/**
* @Route("/test", name="test")
*/
public function test(App\ApiService $service)
{
$service->maybeSetPrefix($service);
$service->call(...
}
// this can go into your own BaseController
public function maybeSetPrefix($service)
{
if ($this->authRepository !== null) {
$service->setPrefix($this->authRepository);
}
}
}
Вы бы не нуждались бы в определении сервиса, потому что Symfony DependencyInjection уже должно автоматически связать это, но вручную это будет выглядеть так:
App\ApiService:
autowire: true
autoconfigure: true
public: false
Так что теперь мы больше не используем идентификаторы сервисов, такие как api.service
, а полное имя класса App\ApiService
.
Если вы все еще хотите оставить службу доступной с помощью api.service
, вы можете дополнительно добавить определение службы псевдонима:
api.service:
alias: App\ApiService
public: true
Но, возможно, в вашем случае вы могли бы позволить вашему App\ApiService
решить, как инициализировать себя на основе запроса вместо контроллера, как это:
class ApiService
{
public function __construct(RequestStack $requestStack, AuthRepository $authRepository)
{
$request = $requestStack->getCurrentRequest();
if ($request->get('option') === 'test') {
$this->setPrefix($authRepository);
}
}
Возможно, опубликуйте более подробную информацию или пример кода вашей текущей логики контроллера, если это не поможет.