Форум 1С-Битрикс

Разбираемся в Битрикс D7: архитектура и особенности

Внимание! Работает режим премодерации. Все сообщения публикуются после проверки!
Страницы: 1
Ответить
RSS
Разбираемся в Битрикс D7: архитектура и особенности
Понимание ядра D7 в Битрикс: отличия, примеры, преимущества

Небольшая обзорная статья по Битрикс D7. Сначала идёт развернутое  описание и сравнение со старым ядром, затем приводятся примеры  использования.
Изменено: Валерий Макеев - 29.09.2025 14:27:03

Этот код автоматически создает таблицу в базе данных если она не  существует, добавляет новую запись о товаре и выводит информацию о  добавленном товаре.

Код
<?php
require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');

use Bitrix\Main\ORM\Fields\IntegerField;
use Bitrix\Main\ORM\Fields\StringField;
use Bitrix\Main\ORM\Fields\DatetimeField;
use Bitrix\Main\ORM\Data\DataManager;
use Bitrix\Main\Type\DateTime;
use Bitrix\Main\Application;

class ExampleTable extends DataManager
{
    public static function getTableName()
    {
        return 'my_example_table';
    }

    public static function getMap()
    {
        return [
            (new IntegerField('ID'))
                ->configurePrimary(true)
                ->configureAutocomplete(true),
            (new StringField('PRODUCT_NAME'))
                ->configureRequired(true),
            new IntegerField('PRICE'),
            (new DatetimeField('DATE_CREATE'))
                ->configureDefaultValue(new DateTime())
        ];
    }
}

// Создаем таблицу если не существует
$connection = Application::getConnection();
$tableName = ExampleTable::getTableName();
if (!$connection->isTableExists($tableName)) {
    $entity = ExampleTable::getEntity();
    $entity->createDbTable();
}

// Создание записи
$result = ExampleTable::add([
    'PRODUCT_NAME' => 'Ноутбук Dell XPS',
    'PRICE' => 125000
]);

if ($result->isSuccess()) {
    $id = $result->getId();
    echo "Добавлен товар ID: $id";
    
    // Чтение записи
    $item = ExampleTable::getById($id)->fetch();
    echo "<pre>"; print_r($item); echo "</pre>";
} else {
    print_r($result->getErrorMessages());
}
Результат выполнения:

Этот код можете использовать как демонстрационный, но он небезопасен по нескольким причинам:
  1. Создание таблиц в runtime - В продакшене структура БД должна управляться через миграции, а не создаваться автоматически при выполнении кода.
  2. Отсутствие проверки прав доступа - Код не проверяет права пользователя на создание таблиц в БД.
  3. Уязвимость к SQL-инъекциям - Хотя ORM обеспечивает защиту, прямое использование данных без валидации может быть опасным.
  4. Конфликт имен таблиц - Автоматическое создание таблиц может привести к конфликтам с существующей структурой БД.
  5. Отсутствие обработки ошибок - Нет полноценной обработки возможных ошибок при создании таблицы.
В продакшен-среде такое создание таблиц "на лету" недопустимо и должно выполняться только через системы миграций БД.
Изменено: Валерий Макеев - 09.09.2025 14:04:55
Страницы: 1
Ответить
Форма ответов
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
 

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Аутсорсинг

готов помочь, если нет времени

договорная

Могу взять на себя работы по full-stack

* на основе готовой верстки

Техническая поддержка

сайтов на CMS 1C-Битрикс

от 20 000 рублей/месяц
Оптимизация производительности действующих интернет-проектов, наполнение и сопровождение, полная техническая поддержка и продвижение в поисковых сетях.

* стоимость зависит от объема и сложности выполняемых работ

Участие в проекте

привлечение в проект на part-time основе

от 30 000 рублей / неделя

Возможно участие в проекте на ежедневной основе, как разработчика. Занятость - до 20 часов в неделю
Минимальный срок - одна неделя.

* сумма фиксированная