Команды создания компонентов и файлов (make)
Стандартные команды Битрикс для генерации кода: компоненты, контроллеры и ORM-классы.
make:component
Создает простой компонент с классом и шаблоном.
Синтаксис
php bitrix.php make:component <name> [опции]Аргументы
name- имя компонента в формате[namespace:]component.name
Опции
--module=<module_id>- указать конкретный модуль--no-module- создать компонент в папке components вне модуля--local- создать в директории DOCUMENT_ROOT/local--root=<путь>- указать корневую папку (по умолчанию DOCUMENT_ROOT)--show- вывести содержимое в консоль без сохранения
Примеры использования
# Компонент с пространством имен 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/
└── ...Логика определения пути к компоненту
Путь к компоненту формируется по следующим правилам:
Выбор папки
/bitrixили/local:- Если
namespace!==bitrixИЛИ указан флаг--local→/local - Иначе →
/bitrix
- Если
Выбор структуры:
- Если указан флаг
--no-module→/components/ - Иначе →
/modules/{module}/install/components/
- Если указан флаг
Определение модуля:
- Если указана опция
--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
use Bitrix\Main\Component\BaseComponent;
class CalendarOpenEventsListComponent extends BaseComponent
{
public function executeComponent()
{
// Логика компонента
$this->includeComponentTemplate();
}
}make:controller
Создает файл контроллера для REST API.
Синтаксис
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
Примеры использования
# Контроллер для модуля
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
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) для таблицы базы данных.
Синтаксис
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- вывод в консоль без сохранения
Примеры использования
# Создание 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
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();
},
]),
];
}
}Использование в разработке
Создание полноценного функционала
#!/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 для всех таблиц модуля
#!/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 создан для всех таблиц"Создание набора компонентов
#!/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 "Все компоненты созданы"Шаблон для микросервиса
#!/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
#!/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
Файл не создается
Проблема: Команда выполняется, но файл не появляется
Решения:
- Проверьте права доступа к целевой директории
- Убедитесь, что путь корректен
- Используйте опцию
--showдля проверки вывода - Проверьте, что директория существует
Неправильное пространство имен
Проблема: Сгенерированный класс имеет неправильный namespace
Решения:
- Используйте опцию
--namespaceдля явного указания - Проверьте composer.json модуля
- Убедитесь, что используется PSR-4 (опция
--psr4)
Класс не автозагружается
Проблема: Созданный класс не находится автозагрузчиком
Решения:
- Проверьте namespace и путь к файлу (должны соответствовать PSR-4)
- Очистите кеш:
php bitrix.php cache:clear - Проверьте composer.json модуля
- Перезагрузите автозагрузчик:
composer dump-autoload
Ошибки в сгенерированном коде
Проблема: Сгенерированный код содержит ошибки
Решения:
- Обновите Битрикс до последней версии
- Отредактируйте код вручную после генерации
- Создайте issue в репозитории Битрикс, если это баг
Полезные советы
💡 Используйте --show для проверки - перед сохранением проверьте что будет сгенерировано
💡 Придерживайтесь PSR-4 - используйте правильную структуру namespace и путей
💡 Автоматизируйте - создавайте скрипты для генерации типовых структур
💡 Документируйте сразу - добавляйте PHPDoc к сгенерированным классам
💡 Версионируйте - коммитьте сгенерированный код в Git
💡 Тестируйте - проверяйте работоспособность сгенерированного кода
💡 Кастомизируйте - используйте опцию --show для создания своих шаблонов
Смотрите также
- Команды разработки - создание модулей и метаданных
- Команды ORM - работа с ORM-сущностями
- Официальная документация Битрикс по REST API
- Официальная документация Битрикс по компонентам
- Официальная документация Битрикс по ORM