Skip to content

Команды создания компонентов и файлов (make)

Стандартные команды Битрикс для генерации кода: компоненты, контроллеры и ORM-классы.

make:component

Создает простой компонент с классом и шаблоном.

Синтаксис

bash
php bitrix.php make:component <name> [опции]

Аргументы

  • name - имя компонента в формате [namespace:]component.name

Опции

  • --module=<module_id> - указать конкретный модуль
  • --no-module - создать компонент в папке components вне модуля
  • --local - создать в директории DOCUMENT_ROOT/local
  • --root=<путь> - указать корневую папку (по умолчанию DOCUMENT_ROOT)
  • --show - вывести содержимое в консоль без сохранения

Примеры использования

bash
# Компонент с пространством имен bitrix (создаётся в /bitrix/modules/calendar/install/components/bitrix/)
php bitrix.php make:component calendar.open-events.list

# Компонент с кастомным пространством имен (создаётся в /local/modules/calendar/install/components/up/)
php bitrix.php make:component up:calendar.open-events.list

# Компонент в /local вместо /bitrix (создаётся в /local/modules/calendar/install/components/bitrix/)
php bitrix.php make:component calendar.open-events.list --local

# Компонент без модуля (создаётся в /local/components/up/)
php bitrix.php make:component up:calendar.open-events.list --no-module

# Компонент в конкретном модуле (создаётся в /bitrix/modules/company.shop/install/components/bitrix/)
php bitrix.php make:component my.component --module=company.shop

# Просмотр без сохранения
php bitrix.php make:component my.component --show

Создаваемая структура

По умолчанию (namespace = bitrix, без флагов):

/bitrix/modules/[module]/install/components/bitrix/[component.name]/
├── class.php              # Класс компонента
└── templates/
    └── .default/
        ├── template.php   # Шаблон
        └── lang/
            └── ru/
                └── template.php  # Языковые файлы

С флагом --no-module:

/local/components/[namespace]/[component.name]/
├── class.php
└── templates/
    └── .default/
        └── ...

Логика определения пути к компоненту

Путь к компоненту формируется по следующим правилам:

  1. Выбор папки /bitrix или /local:

    • Если namespace !== bitrix ИЛИ указан флаг --local/local
    • Иначе → /bitrix
  2. Выбор структуры:

    • Если указан флаг --no-module/components/
    • Иначе → /modules/{module}/install/components/
  3. Определение модуля:

    • Если указана опция --module=xxx → используется указанный модуль
    • Иначе → первая часть имени компонента до точки (например, для calendar.open-events.list это будет calendar)

Примеры результирующих путей:

КомандаПуть
make:component calendar.list/bitrix/modules/calendar/install/components/bitrix/calendar.list/
make:component calendar.list --local/local/modules/calendar/install/components/bitrix/calendar.list/
make:component up:calendar.list/local/modules/calendar/install/components/up/calendar.list/
make:component up:calendar.list --no-module/local/components/up/calendar.list/
make:component my.comp --module=shop/bitrix/modules/shop/install/components/bitrix/my.comp/

Пример сгенерированного класса

php
<?php
use Bitrix\Main\Component\BaseComponent;

class CalendarOpenEventsListComponent extends BaseComponent
{
    public function executeComponent()
    {
        // Логика компонента
        $this->includeComponentTemplate();
    }
}

make:controller

Создает файл контроллера для REST API.

Синтаксис

bash
php bitrix.php make:controller <name> [module] [опции]

Аргументы

  • name - имя контроллера
  • module - ID модуля (необязательный)

Опции

  • --namespace=<namespace> или -ns - кастомное пространство имен
  • --psr4 / --no-psr4 - генерировать путь в стиле PSR-4 / camelCase (по умолчанию включено)
  • --root=<путь> - корневая папка для генерации
  • --show - вывод в консоль без сохранения
  • --actions=<actions> - список действий через запятую (используйте crud для стандартных: list,get,add,update,delete)
  • --alias=<alias> - алиас контроллера из .settings.php

Примеры использования

bash
# Контроллер для модуля
php bitrix.php make:controller Entity partner.module

# С кастомным namespace
php bitrix.php make:controller Entity --namespace My\\Custom\\Namespace

# С генерацией CRUD действий
php bitrix.php make:controller Entity partner.module --actions crud

# С конкретными действиями
php bitrix.php make:controller Entity partner.module --actions index,show,store

# С алиасом (из .settings.php)
php bitrix.php make:controller Entity partner.module --actions crud --alias V2

# Сохранение в произвольный файл
php bitrix.php make:controller Entity partner.module --show > ./my/folder/my-custom-file.php

Структура контроллера

Путь к контроллеру (PSR-4):

/bitrix/modules/partner.module/lib/Controller/EntityController.php

Пример сгенерированного контроллера

php
<?php
namespace Partner\Module\Controller;

use Bitrix\Main\Engine\Controller;

class EntityController extends Controller
{
    // GET /rest/partner.module/entity/list/
    public function listAction($select = [], $filter = [], $order = [])
    {
        // Логика получения списка
        return [];
    }
    
    // GET /rest/partner.module/entity/get/?id=1
    public function getAction($id)
    {
        // Логика получения элемента
        return [];
    }
    
    // POST /rest/partner.module/entity/add/
    public function addAction($fields)
    {
        // Логика создания элемента
        return ['id' => 1];
    }
    
    // POST /rest/partner.module/entity/update/
    public function updateAction($id, $fields)
    {
        // Логика обновления элемента
        return true;
    }
    
    // POST /rest/partner.module/entity/delete/
    public function deleteAction($id)
    {
        // Логика удаления элемента
        return true;
    }
}

make:tablet

Создает ORM-класс (DataManager) для таблицы базы данных.

Синтаксис

bash
php bitrix.php make:tablet <table_name> [module] [опции]

Аргументы

  • table_name - имя таблицы в базе данных (например, b_my_table)
  • module - ID модуля (необязательный)

Опции

  • --namespace=<namespace> или -ns - кастомное пространство имен
  • --root=<путь> - корневая папка для генерации (по умолчанию DOCUMENT_ROOT)
  • --psr4 / --no-psr4 - генерировать путь в стиле PSR-4 / camelCase (по умолчанию включено)
  • --show - вывод в консоль без сохранения

Примеры использования

bash
# Создание ORM-класса для таблицы
php bitrix.php make:tablet b_my_custom_table partner.module

# С кастомным namespace
php bitrix.php make:tablet b_my_custom_table --namespace My\\Custom\\Namespace

# С указанием корневой папки
php bitrix.php make:tablet b_my_custom_table partner.module --root ./my/folder

# Сохранение в произвольный файл
php bitrix.php make:tablet b_my_table partner.module --show > ./my/folder/MyTable.php

Структура ORM-класса

Путь к классу (PSR-4):

/bitrix/modules/partner.module/lib/Entity/MyCustomTable.php

Пример сгенерированного ORM-класса

php
<?php
namespace Partner\Module\Entity;

use Bitrix\Main\Entity\DataManager;
use Bitrix\Main\Entity\IntegerField;
use Bitrix\Main\Entity\StringField;
use Bitrix\Main\Entity\DatetimeField;

class MyCustomTable extends DataManager
{
    public static function getTableName()
    {
        return 'b_my_custom_table';
    }
    
    public static function getMap()
    {
        return [
            new IntegerField('ID', [
                'primary' => true,
                'autocomplete' => true,
            ]),
            new StringField('NAME', [
                'required' => true,
            ]),
            new DatetimeField('DATE_CREATE', [
                'default_value' => function() {
                    return new \Bitrix\Main\Type\DateTime();
                },
            ]),
        ];
    }
}

Использование в разработке

Создание полноценного функционала

bash
#!/bin/bash
# Создание полного CRUD для сущности Product

MODULE_ID="company.shop"
ENTITY="Product"

# 1. Создать ORM-класс для таблицы
php bitrix.php make:tablet b_company_shop_product "$MODULE_ID"

# 2. Создать REST контроллер с CRUD действиями
php bitrix.php make:controller "$ENTITY" "$MODULE_ID" --actions crud

# 3. Создать компонент списка
php bitrix.php make:component "$MODULE_ID:product.list" --local

# 4. Создать компонент детального просмотра
php bitrix.php make:component "$MODULE_ID:product.detail" --local

echo "Функционал для $ENTITY создан"

Генерация API для всех таблиц модуля

bash
#!/bin/bash
# Создание контроллеров для всех таблиц модуля

MODULE_ID="company.shop"
TABLES=(
    "b_company_shop_product:Product"
    "b_company_shop_category:Category"
    "b_company_shop_order:Order"
)

for table_info in "${TABLES[@]}"; do
    IFS=':' read -r table entity <<< "$table_info"
    
    echo "Создание ORM и контроллера для: $entity"
    
    # ORM-класс
    php bitrix.php make:tablet "$table" "$MODULE_ID"
    
    # REST контроллер
    php bitrix.php make:controller "$entity" "$MODULE_ID" --actions crud
done

echo "API создан для всех таблиц"

Создание набора компонентов

bash
#!/bin/bash
# Создание стандартного набора компонентов для модуля

MODULE_ID="company.blog"
NAMESPACE="company"

COMPONENTS=(
    "blog.list"
    "blog.detail"
    "blog.search"
    "blog.categories"
    "blog.archive"
)

for comp in "${COMPONENTS[@]}"; do
    echo "Создание компонента: $comp"
    php bitrix.php make:component "${NAMESPACE}:${comp}" --local --module="$MODULE_ID"
done

echo "Все компоненты созданы"

Шаблон для микросервиса

bash
#!/bin/bash
# Создание структуры для микросервиса

MODULE_ID="company.api"
ENTITIES=("User" "Session" "Token")

for entity in "${ENTITIES[@]}"; do
    echo "=== Создание $entity ==="
    
    # ORM
    TABLE_NAME="b_company_api_$(echo "$entity" | tr '[:upper:]' '[:lower:]')"
    php bitrix.php make:tablet "$TABLE_NAME" "$MODULE_ID"
    
    # REST контроллер
    php bitrix.php make:controller "$entity" "$MODULE_ID" \
        --actions crud \
        --alias v1
    
    echo ""
done

echo "Микросервис создан"

Продвинутые сценарии

Миграция существующей таблицы в ORM

bash
#!/bin/bash
# Создание ORM-классов для существующих таблиц

MODULE_ID="company.legacy"

# Получить список таблиц модуля
mysql -u user -p database -e "SHOW TABLES LIKE 'b_company_%';" | while read -r table; do
    if [ "$table" != "Tables_in_database" ]; then
        echo "Создание ORM для таблицы: $table"
        php bitrix.php make:tablet "$table" "$MODULE_ID"
    fi
done

echo "ORM-классы созданы для всех таблиц"

Troubleshooting

Файл не создается

Проблема: Команда выполняется, но файл не появляется

Решения:

  1. Проверьте права доступа к целевой директории
  2. Убедитесь, что путь корректен
  3. Используйте опцию --show для проверки вывода
  4. Проверьте, что директория существует

Неправильное пространство имен

Проблема: Сгенерированный класс имеет неправильный namespace

Решения:

  1. Используйте опцию --namespace для явного указания
  2. Проверьте composer.json модуля
  3. Убедитесь, что используется PSR-4 (опция --psr4)

Класс не автозагружается

Проблема: Созданный класс не находится автозагрузчиком

Решения:

  1. Проверьте namespace и путь к файлу (должны соответствовать PSR-4)
  2. Очистите кеш: php bitrix.php cache:clear
  3. Проверьте composer.json модуля
  4. Перезагрузите автозагрузчик: composer dump-autoload

Ошибки в сгенерированном коде

Проблема: Сгенерированный код содержит ошибки

Решения:

  1. Обновите Битрикс до последней версии
  2. Отредактируйте код вручную после генерации
  3. Создайте issue в репозитории Битрикс, если это баг

Полезные советы

💡 Используйте --show для проверки - перед сохранением проверьте что будет сгенерировано

💡 Придерживайтесь PSR-4 - используйте правильную структуру namespace и путей

💡 Автоматизируйте - создавайте скрипты для генерации типовых структур

💡 Документируйте сразу - добавляйте PHPDoc к сгенерированным классам

💡 Версионируйте - коммитьте сгенерированный код в Git

💡 Тестируйте - проверяйте работоспособность сгенерированного кода

💡 Кастомизируйте - используйте опцию --show для создания своих шаблонов


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

Документация BXMax CLI