Контейнер

Контейнер - это объект, предназначенный для управления зависимостями классов, а также для хранения данных, доступ к которым нужен в любом месте приложения.

Основные методы:

  • bind() — регистрация зависимости класса. При каждом обращении к зарегистрированной зависимости будем создаваться указанный класс. Первый параметром указывается псевдоним (алиас) зависимости в контейнере. Вторым параметром можно указать имя класса, экземпляр которого будет создан при обращении к контейнеру, или функцию-замыкание.
  • // Инициализируем зависимость при инициализации MODX
    app()->bind('user', function($app, $params = array()) {
    if (isset($params['id'])) $user = user($params['id']);
    // Делаем нужные манипуляции и инициализации
    ...
    // Возвращаем подготовленный объект пользователя
    return $user;
    });
    ...
    // В любом месте приложения вызываем
    $user = app('user', array('id' => 5));  // получаем этот объект пользователя
    
  • singleton() — привязывает класс или интерфейс к контейнеру, который должен быть создан только один раз. При первом обращении создаёт экземпляр указанного класса. При последующих обращениях метод возвращает этот созданный экземпляр. Синглтоны часто используются в качестве сервисов или менеджеров.
  • // В плагине при инициализации MODX определяем зависимость
    app()->singleton('userService', function() use ($modx) {
    	return new userService(); // некий класс сервиса пользователей
    });
    
  • instance() — регистрация уже существующего объекта в качестве синглтона. Данный экземпляр будет всегда возвращаться при последующих обращениях к контейнеру.
  • // Регистрируем объект $modx для доступа к нему из любого места/класса приложения
    app()->instance('modx', $modx);
    // Обращаемся к нему
    $modx = app('modx');
    
  • bound() — проверяет, определена ли указанная зависимость.
  • if (!app()->bound('alias')) {
        app()->bind('alias', function(){...});
    }
    
  • isShared() — проверяет, определена ли указанная зависимость как синглтон.
  • if (app()->isShared('service')) {
        $service = app(service);
    }
    
  • resolved() — проверяет, создан ли объект указанной зависимости. Применяется для проверки синглетонов.
  • if (app()->resolved('modx')) {
        // В контейнере объект $modx существует.
        $modx = $app('modx');
    }
    
Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.