Phalcon\Di
Класс Phalcon\Di
Реализует Phalcon\DiInterface, ArrayAccess
Phalcon\Di это компонент, который реализует внедрение зависимостей / расположение служб и сам является контейнером для них.
Поскольку Phalcon сильно развязан, Phalcon\Di имеет важное значение для интеграции различных компонентов платформы. Разработчик также может использовать этот компонент для внедрения зависимостей и управления глобальными экземплярами различных классов, используемых в приложении.
В основном, этот компонент реализует инверсию схемы управления. Применяя это, объекты не получают свои зависимости с помощью установщиков или конструкторов, но запрашивают инжектор зависимостей служб. Это уменьшает общую сложность, так как есть только один способ получить необходимые зависимости в компоненте.
Кроме того, этот шаблон повышает тестируемость кода, делая его менее подверженным ошибкам.
<?php
use Phalcon\Di;
use Phalcon\Http\Request;
$di = new Di();
// Использование определения строки
$di->set("request", Request::class, true);
// Использование анонимной функции
$di->setShared(
"request",
function () {
return new Request();
}
);
$request = $di->getRequest();
Методы
public __construct ()
Phalcon\Di конструктор
public setInternalEventsManager (Phalcon\Events\ManagerInterface $eventsManager)
Устанавливает внутренний менеджер событий
public getInternalEventsManager ()
Возвращает внутренний менеджер событий
public set (mixed $name, mixed $definition, [mixed $shared])
Регистрация службы в контейнере служб
public setShared (mixed $name, mixed $definition)
Регистрирует "всегда общий" в контейнер услуг
public remove (mixed $name)
Удаляет службу из контейнера служб также удаляет все общие экземпляры, созданные для службы
public attempt (mixed $name, mixed $definition, [mixed $shared])
Попытки зарегистрировать службу в контейнере служб успешны только в том случае, если служба ранее не была зарегистрирована с тем же именем
public setRaw (mixed $name, Phalcon\Di\ServiceInterface $rawDefinition)
Задает службу с помощью необработанного определения Phalcon\Di\Service
public getRaw (mixed $name)
Возвращает определение службы без разрешения
public getService (mixed $name)
Возвращает экземпляр Phalcon\Di\Service
public get (mixed $name, [mixed $parameters])
Разрешает службу на основе ее конфигурации
public mixed getShared (string $name, [array $parameters])
Разрешает службу, разрешенная служба хранится в DI, последующие запросы для этой службы вернут тот же экземпляр
public has (mixed $name)
Проверяет, содержит ли DI сервис по имени
public wasFreshInstance ()
Проверяет, является ли последняя служба, полученная через getShared, новым экземпляром или существующим
public getServices ()
Возврат услуг, зарегистрированных в DI
public offsetExists (mixed $name)
Проверка регистрации службы с помощью синтаксиса массива
public offsetSet (mixed $name, mixed $definition)
Позволяет зарегистрировать общую службу с помощью синтаксиса массива
<?php $di["request"] = new \Phalcon\Http\Request();
public offsetGet (mixed $name)
Позволяет получить общий сервис, используя синтаксис массива
<?php var_dump($di["request"]);
public offsetUnset (mixed $name)
Удаляет службу из контейнера служб с помощью синтаксиса массива
public __call (mixed $method, [mixed $arguments])
Магический метод получения или установки сервисов с помощью setters / getters
public register (Phalcon\Di\ServiceProviderInterface $provider)
Регистрация поставщика услуг.
<?php
use Phalcon\DiInterface;
use Phalcon\Di\ServiceProviderInterface;
class SomeServiceProvider implements ServiceProviderInterface
{
public function register(DiInterface $di)
{
$di->setShared('service', function () {
// ...
});
}
}
public static setDefault (Phalcon\DiInterface $dependencyInjector)
Установка контейнера внедрения зависимостей по умолчанию для получения статических методов
public static getDefault ()
Возврат последнего созданного DI
public static reset ()
Сбрасывает внутренний DI по умолчанию
public loadFromYaml (mixed $filePath, [array $callbacks])
Загружает службы из файла yaml.
<?php
$di->loadFromYaml(
"path/services.yaml",
[
"!approot" => function ($value) {
return dirname(__DIR__) . $value;
}
]
);
И сервисы могут быть указаны в файле как:
myComponent:
className: \Acme\Components\MyComponent
shared: true
group:
className: \Acme\Group
arguments:
- type: service
name: myComponent
user:
className: \Acme\User
public loadFromPhp (mixed $filePath)
Загружает сервисы из конфигурационного файла php.
<?php
$di->loadFromPhp("path/services.php");
И сервисы могут быть указаны в файле как:
<?php
return [
'myComponent' => [
'className' => '\Acme\Components\MyComponent',
'shared' => true,
],
'group' => [
'className' => '\Acme\Group',
'arguments' => [
[
'type' => 'service',
'service' => 'myComponent',
],
],
],
'user' => [
'className' => '\Acme\User',
],
];
protected loadFromConfig (Phalcon\Config $config)
Загружает службы из объекта Config.