Skip to content
  1. Компоненты
  2. mxHeadless
  3. Расширение

Расширение API ​

Сторонние Extras регистрируют объекты без правок core. Точка входа: событие OnMxHeadlessRegister.

Событие ​

php
<?php
/** @var \MODX\Revolution\modX $modx */
switch ($modx->event->name) {
    case 'OnMxHeadlessRegister':
        /** @var \MxHeadless\Extension\ExtensionApi $api */
        $api = $modx->event->params['api'];
        $api->registerObject(
            \MxHeadless\Definition\ObjectDefinition::create('products')
                ->setName('products')
                ->class(\MiniShop3\Model\msProduct::class)
                ->fields(['id', 'pagetitle', 'price', 'article'])
                ->filterable(['id', 'price', 'parent'])
                ->sorts(['id', 'price', 'pagetitle'])
                ->readable()
        );
        break;
}

После обработчиков реестр и коллекция маршрутов замораживаются (ExtensionApi::freeze()). Поздний registerObject или registerRelation бросает RegistryFrozenException, поздний registerEndpoint бросает RuntimeException с текстом Route collection is frozen.

Методы ExtensionApi ​

МетодНазначение
registerObject(ObjectDefinition)xPDO-класс под публичным именем
registerRelation(string $object, RelationDefinition)Связь для include=
registerEndpoint(...)Свой маршрут с обработчиком
registry()Доступ к зарегистрированным определениям

ObjectDefinition ​

php
ObjectDefinition::create('locations')
    ->setName('locations')
    ->class(YmlLocation::class)
    ->fields(['id', 'title', 'lat', 'lng'])
    ->filterable(['id', 'city_id'])
    ->sorts(['id', 'title'])
    ->readable()
    ->creatable(false)
    ->hiddenFields(['internal_note'])
    ->protectedFields(['owner_id'])
    ->contexts(['web']);

Флаги: readable, creatable, updatable, deletable, searchable, hiddenFields, protectedFields, immutableFields, requiredFields, primaryKey, contexts, contextAccessGated.

contextAccessGated отключает проверку списка contexts и переключает контроль доступа на проверку ACL по ключу контекста конкретной записи. Так помечен core-объект contexts.

События цепочки ​

СобытиеКогда
OnMxHeadlessRegisterРегистрация objects, relations, endpoints
OnMxHeadlessRegisterMiddlewareДо freeze стека. registrar: prepend / append
OnMxHeadlessBeforeRequestПосле auth, до handler. Можно подменить request через $modx->event->returned
OnMxHeadlessAfterRequestПосле handler. Можно подменить response

Дальше ​