modX.getService
Последнее обновление Sep 2nd, 2026 | История страницы | Улучшить эту страницу | Сообщить о проблеме
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$204 per month—let's make that $500!
Learn moremodX::getService¶
Устарел в MODX 3.x. xPDO помечает getService() как deprecated и отправляет к контейнеру сервисов ($modx->services). PhpStorm из-за phpdoc предупреждает об удалении в 3.1. Удаления не было. Метод есть в текущих 3.x, ядро само его ещё вызывает. В новом коде берите $modx->services. См. Контейнер внедрения зависимостей.
getService живёт в xPDO (modX его наследует). Загружает и возвращает экземпляр сервиса или null, если класс не поднялся. Экземпляр создаётся один раз. Повторные вызовы отдают тот же объект. В 3.x он ещё кладётся в $modx->services.
Синтаксис¶
object getService (string $name, [string $class = ''], [string $path = ''], [array $params = array ()])
-
$name(string) ключ сервиса. -
$class(string) имя класса дляnewили точечная нотация для подпапок относительно$path. -
$path(string) каталог с файлом класса. -
$params(array) второй аргумент конструктора. Первый всегда экземпляр xPDO/MODX.
Определение: xPDO::getService().
Примеры (по-прежнему работают)¶
Сервис Smarty:
$modx->getService('smarty','smarty.modSmarty');
Свой сервис с путём и параметрами конструктора:
$modx->getService('twitter','modTwitter','/path/to/',array(
'api_key' => 3212423,
));
$modx->twitter->tweet('Успех!');
В Extra:
// Путь сразу в каталог класса:
if(!$Product = $this->modx->getService('mypkg.product','Product',MODX_CORE_PATH.'components/mypkg/model/mypkg/')) {
return 'НЕ НАЙДЕН';
}
// Или точечная нотация и $path на каталог модели:
if(!$Product = $this->modx->getService('mypkg.product','mypkg.Product',MODX_CORE_PATH.'components/mypkg/model/')) {
return 'НЕ НАЙДЕН';
}
У getService бывают проблемы с PHP-пространствами имён. Передайте FQCN или зарегистрируйте объект в контейнере сами.
Замена в MODX 3¶
Используйте $modx->services (has / add / get). Ядро так делает в modX::runProcessor() для lexicon и error.
Регистрация сервиса ядра (пример: modError):
use MODX\Revolution\Error\modError;
if (!$modx->services->has('error')) {
$modx->services->add('error', new modError($modx));
}
$modx->error = $modx->services->get('error');
Свой Extra: создайте класс (Composer / autoload namespace) и добавьте его. Обычно это bootstrap.php пространства имён:
$modx->services->add('twitter', function($c) use ($modx) {
return new MyPackage\Twitter($modx, ['api_key' => 3212423]);
});
Дальше:
$twitter = $modx->services->get('twitter');
$twitter->tweet('Успех!');
modError ($modx->error) и modErrorHandler ($modx->errorHandler) это разные сервисы. Ключи не путайте.
Смотрите также¶
- modX
- MODX Services
- Контейнер внедрения зависимостей
- xPDO.loadClass загружает класс без создания экземпляра
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$204 per month—let's make that $500!
Learn more










