Для того чтобы получить контейнер php-di вне контроллера, вам понадобится прежде всего установить саму библиотеку php-di через composer. Выполните команду composer require php-di/php-di
в вашей директории проекта.
После успешной установки вы сможете создать экземпляр контейнера php-di:
require 'vendor/autoload.php'; use DIContainerBuilder; $containerBuilder = new ContainerBuilder(); $container = $containerBuilder->build();
Теперь у вас есть доступ к контейнеру php-di. Вы можете зарегистрировать свои зависимости с помощью метода set
и получить их с помощью метода get
. Ниже приведены примеры:
// Регистрация зависимости $container->set('myService', function () { return new MyService(); }); // Получение зависимости $myService = $container->get('myService');
Это дает вам возможность инъекции зависимости в ваши классы, включая "не-контроллеры". Например:
class MyService { private $dependency; public function __construct(OtherService $dependency) { $this->dependency = $dependency; } } class OtherService { // ... } // Регистрация зависимостей $container->set('myService', function () use ($container) { $dependency = $container->get('otherService'); return new MyService($dependency); }); $container->set('otherService', function () { return new OtherService(); }); // Получение зависимости $myService = $container->get('myService');
Теперь, когда вы получите myService
из контейнера, контейнер сам разрешит зависимость otherService
и создаст экземпляр MyService
с правильными зависимостями.
Это небольшой пример использования контейнера php-di. Он позволяет вам гибко управлять зависимостями вашего приложения и достичь инверсии управления. Контейнер php-di также предоставляет множество других функций, таких как конфигурирование зависимостей, использование аннотаций для инъекции зависимостей и многое другое. Документация к библиотеке содержит полное объяснение всех возможностей.