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

Простая форма добавления/редактирования

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

php · edit.php
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_before.php');

use Bitrix\Main\Loader;
use DevBx\Core\UI\Edit\Form;

Loader::includeModule('catalog');
Loader::includeModule('devbx.core');

$form = new Form('catalog', \Bitrix\Catalog\PriceTable::class);

$form->show();

Форма сама разберёт, что делать: без первичного ключа в адресе — добавление новой записи, с ключом — правка существующей.

Поля только для чтения и скрытые поля

php
$form = new Form('catalog', \Bitrix\Catalog\PriceTable::class, [
    'READ_ONLY_FIELDS' => ['PRODUCT_ID', 'TIMESTAMP_X'],
    'HIDDEN_FIELDS' => ['CATALOG_GROUP_ID'],
]);

Поле только для чтения показывается значением без возможности правки. Скрытое поле не выводится вовсе, но сохраняется вместе с записью — так передают привязку, заданную адресом страницы.

Своё поле

Когда стандартного элемента управления не хватает, поле описывают классом — наследником DevBx\Core\UI\Edit\Fields\BaseField. Для пользовательских полей есть готовый DevBx\Core\UI\Edit\Fields\UserTypeField.

Оба класса раньше назывались DevBx\Core\Admin\EditField и DevBx\Core\Admin\EditUserTypeField; старые имена работают.

Проверка перед сохранением

Сущность проверяет значения сама — по типам полей и своим правилам. Ошибки форма показывает рядом с полем, к которому они относятся, и не сохраняет запись.

Своя проверка добавляется обработчиком события сущности onBeforeAdd или onBeforeUpdate: там она сработает и при сохранении из формы, и при сохранении из любого другого кода — а проверка, написанная только в форме, защищает лишь эту страницу.