Класс Phalcon\Di

Реализует Phalcon\DiInterface, ArrayAccess

Source on GitHub

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.