Jump to main content Jump to doc navigation

modX::getService

Загружает и возвращает экземпляр именованного класса обслуживания. Возвращает ссылку на экземпляр класса обслуживания или значение null, если он не может быть загружен. Вы можете подумать, что это простая инъекция зависимости.

Обратите внимание, что экземпляр класса создается только один раз: последующие вызовы возвращают ссылку на сохраненный экземпляр.

Синтаксис

API Doc: modX::getService()

object getService (string $name, [string $class = ''], [string $path = ''], [array $params = array ()])
  • $name: ключ, который однозначно идентифицирует службу.
  • $class: полное имя класса, совместимого с оператором "new", ИЛИ вы можете использовать "точечную нотацию" для указания вложенных папок относительно $path.
  • $path: полный путь к каталогу, содержащему рассматриваемый класс.
  • $params: передается в качестве второго аргумента в конструктор. Первый аргумент всегда является ссылкой на xPDO/MODX.

Примеры

Получение сервиса modSmarty.

$modx->getService('smarty','smarty.modSmarty');

Получить пользовательский, определенный пользователем сервис под названием 'modTwitter' из пользовательского пути ('/path/to/modtwitter.class.php'), и передать некоторые пользовательские параметры.

$modx->getService('twitter','modTwitter','/path/to/',array(
  'api_key' => 3212423,
));
$modx->twitter->tweet('Success!');

Еще один пример использования getService внутри пользовательского Extra:

// Используйте путь, чтобы указать непосредственно на соответствующий вложенный каталог:
if(!$Product = $this->modx->getService('mypkg.product','Product',MODX_CORE_PATH.'components/mypkg/model/mypkg/')) {
    return 'NOT FOUND';
}
// Или используйте точечную нотацию в имени класса и укажите $path на каталог модели:
if(!$Product = $this->modx->getService('mypkg.product','mypkg.Product',MODX_CORE_PATH.'components/mypkg/model/')) {
    return 'NOT FOUND';
}

У getService могут возникнуть проблемы с пространствами имен PHP.

Смотрите также