Метод getProvidedServices класса ServiceLocator
Метод getProvidedServices класса ServiceLocator возвращает массив идентификаторов сервисов, которые доступны в данном локаторе. Метод не принимает параметров и возвращает ассоциативный массив, где ключами являются идентификаторы сервисов, а значениями - те же идентификаторы. Это позволяет узнать, какие сервисы зарегистрированы в локаторе, без их фактического получения.
Синтаксис
public function getProvidedServices(): array
Пример
Давайте создадим сервис и зарегистрируем его в локаторе, а затем получим список предоставляемых сервисов:
<?php
namespace AppService;
class ArticleService
{
public function getTitle(): string
{
return 'article';
}
}
?>
<?php
namespace AppController;
use AppServiceArticleService;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentDependencyInjectionServiceLocator;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(): Response
{
$locator = new ServiceLocator([
'ArticleService' => fn () => new ArticleService(),
]);
$res = $locator->getProvidedServices();
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
{"ArticleService":"ArticleService"}
Пример
Давайте добавим несколько сервисов в локатор и проверим список предоставляемых сервисов:
<?php
namespace AppService;
class UserService
{
public function getName(): string
{
return 'user';
}
}
?>
<?php
namespace AppService;
class ArticleService
{
public function getTitle(): string
{
return 'article';
}
}
?>
<?php
namespace AppController;
use AppServiceArticleService;
use AppServiceUserService;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentDependencyInjectionServiceLocator;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/services', name: 'article_services')]
public function services(): Response
{
$locator = new ServiceLocator([
'UserService' => fn () => new UserService(),
'ArticleService' => fn () => new ArticleService(),
]);
$res = $locator->getProvidedServices();
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
{"UserService":"UserService","ArticleService":"ArticleService"}
Смотрите также
-
класс
ServiceLocator,
который реализует паттерн локатор сервисов -
метод
get,
который возвращает сервис по его идентификатору -
метод
has,
который проверяет наличие сервиса в локаторе -
класс
Container,
который управляет сервисами в приложении