BMC IO DocsBMC IO Docs
IO v6
IO v7
Notes
Docs
IO v6
IO v7
Notes
Docs
  • IO Framework v7

    • О фреймворке
    • Что изменилось в 7 версии
    • IO7 Framework vs Laravel 13 — Сравнение
    • Структура
    • Варианты проектов
    • Доступ к участкам проекта
    • Разворачивание нового проекта
    • Установка проекта
    • Запуск локальной разработки
  • API

    • Обзор API
    • IOCore::call() и IOCore::callAction()
    • Создание API
  • CLI

    • Обзор CLI
    • iocli
    • Кастомные CLI команды
  • Работа с базами данных

    • Обзор работы с базами данных
    • Cron / Планировщик задач (Schedule)
    • Фабрики
    • Миграции
    • Сидеры
    • Query Builder
    • Подключение MinIO
    • Подключение MongoDB
    • Подключение MySQL
    • Подключение PostgreSQL
    • Подключение ProxySQL
    • Подключение RabbitMQ
    • Подключение Redis
  • Логирование

    • Обзор логирования
    • IOEvent - Логирование событий
    • Pinba (PinbaManager) - Профилировщик
  • Модели

    • Обзор моделей
    • CRUD операции
    • Связи моделей
  • Очереди

    • Обзор очередей
    • RabbitMQ
  • Маршруты

    • Обзор маршрутов
    • Определение маршрутов
    • Middleware
  • Сессии

    • Обзор сессий
    • Кроссдоменная SSO
    • JWT авторизация
    • Социальная авторизация
    • OAuth2
    • Keycloak
  • Twig

    • Обзор Twig
    • Формы (FormBuilder)
    • Twig функции
  • Тестирование

    • Обзор тестирования
    • Unit тесты
  • Backend

    • Настройки проекта Conf.php
    • Настройки модуля Module.php
    • Настройки composer
    • Функции фреймворка
    • Вспомогательные функции (Helpers)
    • Глобальные переменные
    • Константы фреймворка
    • Event класс
    • Core класс
    • Route и работа с ними
    • Request и работа с ними
    • Middleware и работа с ними
    • Class и работа с ними
    • Api model и работа с ними
    • Template и работа с ними
    • Мультиязычность и словарь фраз
    • Bin скрипты и работа с ними
    • Cron скрипты и работа с ними
    • $ioSession и работа с сессией
    • $ioHash и работа с кешем
    • $ioXCache и работа с кешем
    • $iodb и работа с базой данных
    • Миграции
  • Frontend

    • Twig шаблонизатор и работа с ним
    • Twig функции
    • Twig фильтры
    • Twig контекст
    • Настройка NPM
    • Сборка Frontend составляющей
    • Обращение к Api через JS
    • Хранилище (store)
    • Навигация в хосте
    • Навигация в микрофронтенде
    • Параметры микрофронтенда
    • Проверка полномочий
  • Tailux UI Компоненты

    • Базовый UI

      • AvatarDot
      • Avatar
      • Badge
      • Button
      • Card
      • ConfirmModal
      • Divider
      • Highlight
      • Tag
    • Загрузка

      • Circlebar
      • Progress
      • Skeleton
      • Spinner
    • Навигация

      • Accordion
      • AccordionButton
      • AccordionHeader
      • AccordionItem
      • AccordionPanel
      • AccordionProvider
      • Pagination
      • PaginationControl
      • PaginationItems
      • PaginationDots
      • PaginationFirst
      • PaginationLast
      • PaginationNext
      • PaginationPrevious
    • Отображение данных

      • Box
      • Collapse
      • ContextualHelp
      • ScrollShadow
      • Timeline
      • TimelineItem
    • Элементы таблиц

      • Table
      • CollapsibleSearch
      • ColumnFilter
      • CopyableCell
      • DateFilter
      • FacetedFilter
      • FilterSelector
      • PaginationSection
      • RadioFilter
      • RangeFilter
      • ResponsiveFilter
      • RoleFilter
      • SelectedRowsActions
      • TableColumnVisibility
      • TableSettings
      • TableSortIcon
    • Элементы форм

      • Checkbox
      • Combobox
      • DatePicker
      • Filepond
      • Input
      • Listbox
      • Radio
      • Range
      • Select
      • StyledSwitch
      • Swap
      • SwapOn
      • SwapOff
      • Switch
      • Textarea
      • TextEditor
      • Upload

Определение маршрутов IO7

Внимание

Данная статья документации написана нейросетью. Возможны некоторые расхождения и неточность информации!

  • Регистрация маршрутов
    • Через App::add_route()
    • Примеры
  • Класс маршрута
  • Методы Route для ответов
  • Доступ к данным
  • Регистрация через модули
  • См. также

Регистрация маршрутов

Через App::add_route()

$app->add_route(array $route_info): void

Ключи $route_info:

КлючТипЗначение по умолчаниюОбязателенОписание
urlstring—ДаURL-паттерн (напр. /users/:id)
matchstringnullНетRegex-паттерн (авто из url)
typestring[]['get']НетHTTP-методы
class_namestringnullНетКласс-обработчик
methodstring—ДаМетод обработчик
namestringnullНетИмя маршрута
middlewarestring[]|string[]НетMiddleware классы
corsarray[]НетCORS конфигурация
nosessionboolfalseНетНе создавать сессию

Примеры

// GET /users
$app->add_route([
    'url'        => '/users',
    'type'       => ['get'],
    'class_name' => \App\Routes\UserRoute::class,
    'method'     => 'index',
]);

// GET|POST /users/:id
$app->add_route([
    'url'        => '/users/:id',
    'type'       => ['get', 'post'],
    'class_name' => \App\Routes\UserRoute::class,
    'method'     => 'show',
]);

// CRUD маршруты
$app->add_route(['url' => '/api/products',        'type' => ['get'],          'method' => 'list']);
$app->add_route(['url' => '/api/products/:id',    'type' => ['get'],          'method' => 'get']);
$app->add_route(['url' => '/api/products',        'type' => ['post'],         'method' => 'create']);
$app->add_route(['url' => '/api/products/:id',    'type' => ['put'],          'method' => 'update']);
$app->add_route(['url' => '/api/products/:id',    'type' => ['delete'],       'method' => 'delete']);

// С middleware
$app->add_route([
    'url'        => '/admin/users',
    'type'       => ['get'],
    'class_name' => \App\Routes\AdminRoute::class,
    'method'     => 'users',
    'middleware'  => [\IO\Middlewares\AuthMiddleware::class],
]);

// С CORS
$app->add_route([
    'url'        => '/api/cross-origin',
    'type'       => ['get', 'post', 'options'],
    'class_name' => \App\Routes\ApiRoute::class,
    'method'     => 'handle',
    'cors' => [
        'allow_origin'  => ['https://example.com'],
        'allow_methods' => ['GET', 'POST', 'OPTIONS'],
        'allow_headers' => ['Content-Type', 'Authorization'],
    ],
]);

Класс маршрута

Наследуйтесь от IO\Route:

namespace App\Routes;

use IO\Route;
use IO\Response;

class UserRoute extends Route
{
    public function index(): \IO\Response
    {
        $users = \IO\Core::callAction('app.model.user.search', []);
        return $this->json($users);
    }

    public function show(): \IO\Response
    {
        $id = $this->args['id'];
        $user = \IO\Core::callAction('app.model.user.getByID', ['pkid' => $id]);
        return $this->json($user);
    }

    public function create(): \IO\Response
    {
        $data = $this->request->input();
        $result = \IO\Core::callAction('app.model.user.create', [
            'item' => $data,
        ]);
        return $this->json($result, 201);
    }
}

Методы Route для ответов

МетодВозвращаетОписание
json(array, int)ResponseJSON-ответ
text(string, int)ResponseТекстовый ответ
render(string, array, int)ResponseTwig-шаблон
redirect(string, int)ResponseРедирект
noContent(int)ResponseПустой ответ
handleResponse(mixed)ResponseАвто-определение типа
// JSON
return $this->json(['data' => $items]);

// Twig шаблон
return $this->render('@app/pages/users.twig', [
    'users' => $users,
    'title' => 'Пользователи',
]);

// Редирект
return $this->redirect('/login');

// Автоматическое определение
return $this->handleResponse(['status' => 'ok']); // → JSON
return $this->handleResponse('Hello');              // → text
return $this->handleResponse(null);                 // → 204

Доступ к данным

// Параметры URL (/users/:id)
$id = $this->args['id'];

// Запрос
$this->request->input('name');           // любой параметр
$this->request->query('page');           // GET параметр
$this->request->post('email');           // POST параметр
$this->request->route('id');             // параметр маршрута
$this->request->json('data');            // JSON тело
$this->request->all();                   // все параметры
$this->request->only(['name', 'email']); // только указанные
$this->request->except(['password']);    // кроме указанных
$this->request->hasFile('avatar');       // проверка файла

// Контекст middleware
$this->get('user_id');
$this->set('data', $value);
$this->has('key');

Регистрация через модули

class Module extends \IO\Module
{
    public static function init(\IO\App $app): void
    {
        $app->add_routes([
            \App\Routes\Web::class,
            \App\Routes\Api::class,
        ]);
    }
}

См. также

  • Обзор маршрутов
  • Middleware
Prev
Обзор маршрутов
Next
Middleware