Простая форма добавления/редактирования
Простейшая форма добавления и редактирования занимает несколько строк: поля она строит сама по описанию сущности.
<?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();
Форма сама разберёт, что делать: без первичного ключа в адресе — добавление новой записи, с ключом — правка существующей.
Поля только для чтения и скрытые поля
$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: там
она сработает и при сохранении из формы, и при сохранении из любого другого кода — а проверка,
написанная только в форме, защищает лишь эту страницу.