Метод get класса ServiceLocator
Метод get класса ServiceLocator возвращает
сервис из локатора по его идентификатору. Первым
параметром передаётся строка с именем сервиса.
Если сервис не найден, выбрасывается исключение
ServiceNotFoundException.
Синтаксис
public function get(string $id): object
Пример
Давайте получим сервис 'article.repository' из локатора:
<?php
namespace AppService;
use SymfonyComponentDependencyInjectionServiceLocator;
class ArticleService
{
private ServiceLocator $locator;
public function __construct(ServiceLocator $locator)
{
$this->locator = $locator;
}
public function findAll(): array
{
$repository = $this->locator->get('article.repository');
return $repository->findAll();
}
}
?>
Результат выполнения кода:
["article 1", "article 2", "article 3"]
Пример
Давайте обработаем ситуацию, когда сервис отсутствует в локаторе:
<?php
namespace AppService;
use SymfonyComponentDependencyInjectionServiceLocator;
use SymfonyComponentDependencyInjectionExceptionServiceNotFoundException;
class ArticleService
{
private ServiceLocator $locator;
public function __construct(ServiceLocator $locator)
{
$this->locator = $locator;
}
public function find(string $id): string
{
try {
$repository = $this->locator->get('article.repository');
return 'found';
} catch (ServiceNotFoundException $e) {
return 'not found';
}
}
}
?>
Результат выполнения кода:
"found"
Пример
Давайте получим несколько сервисов из локатора по очереди:
<?php
namespace AppService;
use SymfonyComponentDependencyInjectionServiceLocator;
class ArticleService
{
private ServiceLocator $locator;
public function __construct(ServiceLocator $locator)
{
$this->locator = $locator;
}
public function process(): array
{
$res = [];
$res[] = $this->locator->get('article.repository')->findAll();
$res[] = $this->locator->get('article.manager')->count();
return $res;
}
}
?>
Результат выполнения кода:
[["article 1", "article 2"], 2]
Смотрите также
-
класс
ServiceLocator,
который хранит набор сервисов -
метод
has,
который проверяет наличие сервиса в локаторе -
метод
getProvidedServices,
который возвращает список доступных сервисов -
класс
Container,
который управляет сервисами приложения