Документация 1С-Битрикс: Модули artamonov.rest

Контроллеры

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

Контроллеры указываются в карте роутов при описании роута. По умолчанию, контроллеры располагаются в папке модуля /bitrix/modules/artamonov.rest/lib/controllers/. Но, также контроллер может располагаться за пределами модуля, главное чтобы он был доступен через пространство имён или по указанному пути.

Начиная с версии 2.3.0 можно указать путь к PHP-скрипту, вместо указания неймспейса контроллера.

В качестве примера, можно ознакомиться с нативными контроллерами, расположенными по пути /bitrix/modules/artamonov.rest/lib/controllers/native.

/**
 * Copyright (c) 2019 Denis Artamonov
 * Created: 1/13/19 5:23 PM
 * Author: Denis Artamonov
 *
 * Пример контроллера
 */

namespace Artamonov\Rest\Controllers\Native;


class Example
{
    public function __construct()
    {
        if (!config()->get('useExampleRoute')) {
            response()->json('Showing examples is disabled in the settings');
        }
    }

    public function _get()
    {
        $this->response(__FUNCTION__);
    }

    public function _post()
    {
        $this->response(__FUNCTION__);
    }

    public function _put()
    {
        $this->response(__FUNCTION__);
    }

    public function _delete()
    {
        $this->response(__FUNCTION__);
    }

    public function _head()
    {
        $this->response(__FUNCTION__);
    }

    private function response($action)
    {
        $response = [
            'message' => 'Запрос выполнен успешно',
            'date' => date('Y-m-d H:i:s'),
            'controller' => __CLASS__,
            'action' => $action,
            'method' => request()->method(),
            'header' => request()->header(),
            'request' => request()->get(),
            'server' => $_SERVER
        ];
        journal()->add('request-response', ['request' => request()->get(), 'response' => $response]);
        response()->json($response);
    }
}

Namespace контроллеры

Для использования контроллеров из собственной директории, необходимо:

  1. Создать директорию, например, /local/api/controllers/;
  2. Создать файл с классом, например, /local/api/controllers/product.php;
  3. Указать для класса корректный namespace (согласно PSR);
/**
 * Copyright (c) 2019 Denis Artamonov
 * Created: 3/18/19 12:13 PM
 * Author: Denis Artamonov
 */

namespace Local\Api\Controllers;


class Product
{
    public function __construct()
    {
        // code ...
    }

    public function _get()
    {
        // code ...
    }

    public function _post()
    {
        // code ...
    }

    public function _put()
    {
        // code ...
    }

    public function _patch()
    {
        // code ...
    }

    public function _delete()
    {
        // code ...
    }

    public function _head()
    {
        // code ...
    }
}
  1. Указать в карте роутов, в качестве контроллера, собственный класс через его namespace.
/**
 * Copyright (c) 2019 Denis Artamonov
 * Created: 3/18/19 12:19 PM
 * Author: Denis Artamonov
 */

return [
    'GET' => [
        'product/get' => [
            'controller' => '\Local\Api\Controllers\Product@_get'
        ]
    ],
    'POST' => [
        'product/post' => [
            'controller' => '\Local\Api\Controllers\Product@_post'
        ]
    ],
    'PUT' => [
        'product/put' => [
            'controller' => '\Local\Api\Controllers\Product@_put'
        ]
    ],
    'PATCH' => [
        'product/patch' => [
            'controller' => '\Local\Api\Controllers\Product@_patch'
        ]
    ],
    'DELETE' => [
        'product/delete' => [
            'controller' => '\Local\Api\Controllers\Product@_delete'
        ]
    ],
    'HEAD' => [
        'product/head' => [
            'controller' => '\Local\Api\Controllers\Product@_head'
        ]
    ]
];

Файловые контроллеры

Для использования контроллеров из файлов, необходимо:

  1. Создать директорию, например, /local/api/controllers/;
  2. Создать файл с необходимым кодом, например, /local/api/controllers/product.php;
/**
 * Copyright (c) 2019 Denis Artamonov
 * Created: 3/18/19 12:37 PM
 * Author: Denis Artamonov
 */

// Массив в который формируем ответ
$response = [];

// code ...

// Возвращаем ответ клиенту
response->json($response);
  1. Указать в карте роутов, в качестве контроллера, путь к PHP-скрипту.
/**
 * Copyright (c) 2019 Denis Artamonov
 * Created: 3/18/19 12:43 PM
 * Author: Denis Artamonov
 */

return [
    'GET' => [
        'product/get' => [
            'controller' => $_SERVER['DOCUMENT_ROOT'] . '/local/api/controllers/product.php'
        ]
    ],
    'POST' => [
        'product/post' => [
            'controller' => $_SERVER['DOCUMENT_ROOT'] . '/local/api/controllers/product.php'
        ]
    ],
    'PUT' => [
        'product/put' => [
            'controller' => $_SERVER['DOCUMENT_ROOT'] . '/local/api/controllers/product.php'
        ]
    ],
    'PATCH' => [
        'product/patch' => [
            'controller' => $_SERVER['DOCUMENT_ROOT'] . '/local/api/controllers/product.php'
        ]
    ],
    'DELETE' => [
        'product/delete' => [
            'controller' => $_SERVER['DOCUMENT_ROOT'] . '/local/api/controllers/product.php'
        ]
    ],
    'HEAD' => [
        'product/head' => [
            'controller' => $_SERVER['DOCUMENT_ROOT'] . '/local/api/controllers/product.php'
        ]
    ]
];