Класс BaseProvider
Описание
Bitrix\UI\EntitySelector\BaseProvider — абстрактный класс, от которого должны наследоваться все провайдеры данных.
abstract class BaseProvider
{
protected function __construct()
{
}
public abstract function isAvailable(): bool;
public abstract function getItems(array $ids): array;
public abstract function getSelectedItems(array $ids): array;
public function fillDialog(Dialog $dialog): void
{
}
public function getChildren(Item $parentItem, Dialog $dialog): void
{
}
public function doSearch(SearchQuery $searchQuery, Dialog $dialog): void
{
}
public function handleBeforeItemSave(Item $item): void
{
}
public function getOption(string $option, $defaultValue = null)
{
}
}
Конструктор
__construct(array $options = [])
Конструктор класса.
$options — массив произвольных опций провайдера, которые задаются при создании диалога в JavaScript.
Данный метод обычно используется для проверки корректности входных опций и для заполнения внутренней коллекции $this->options. Используйте метод getOption для получения установленных опций.
class MyProvider extends \Bitrix\UI\EntitySelector\BaseProvider
{
public function __construct(array $options = [])
{
parent::__construct();
$this->options['myOption'] = true;
if (isset($options['myOption']) && is_bool($options['myOption']))
{
$this->options['myOption'] = $options['myOption'];
}
}
}
Методы
| Метод | Описание | С версии |
|---|---|---|
| isAvailable(): bool | Абстрактный метод. Возвращает true, если провайдер данных доступен для использования. Обычно в этом методе проверяют права доступа текущего пользователя.
class MyProvider extends \Bitrix\UI\EntitySelector\BaseProvider
{
public function isAvailable(): bool
{
return $GLOBALS['USER']->isAuthorized();
}
}
| |
| getItems(array $ids): array | Абстрактный метод, который получает массив идентификаторов элементов и должен вернуть массив объектов Item.
При получении данных следует учитывать права доступа текущего пользователя. Выходной массив должен содержать только те элементы, к которым текущий пользователь имеет доступ. | |
| getSelectedItems(array $ids): array | Данный абстрактный метод аналогичен методу getItems, но вызывается он для элементов, для которых заранее известно, что они выбраны (опция preselectedItems).
Разницу между getItems и getSelectedItems удобнее всего показать на примере сущности "пользователь". Например, есть запись в блоге, которая адресована нескольким пользователям. При редактировании этой записи пользователи, указанные в поле "Кому", должны быть все отображены, даже если среди них есть уволенные (неактивные). Однако уволенных сотрудников точно не должно быть в списке "Последних" или на вкладке со структурой компании. Метод getSelectedItems вернет данные по уволенным сотрудникам, а getItems — нет. Если у сущности нет элементов, которые могут иметь разную видимость в зависимости от контекста, реализации getItems и getSelectedItems будут совпадать. | |
| fillDialog(Dialog $dialog): void | Данный метод выполняется при динамической загрузке данных диалога. Здесь можно добавить вкладки, элементы, футер или дозаполнить вкладку "Последние".
| |
| getChildren(Item $parentItem, Dialog $dialog): void | Метод вызывается при загрузке дочерних элементов древовидных сущностей. | |
| doSearch(SearchQuery $searchQuery, Dialog $dialog): void | Метод вызывается при динамическом поиске элементов.
| |
| handleBeforeItemSave(Item $item): void | Метод вызывается перед сохранением элемента в список "последних". Может использоваться для отмены сохранения.
class MyProvider extends \Bitrix\UI\EntitySelector\BaseProvider
{
public function handleBeforeItemSave(Item $item): void
{
if ($item->getEntityType() === 'email')
{
// Отменяем сохранение
$item->setSaveable(false);
}
elseif ($item->getEntityType() === 'another')
{
// выполняем другие операции
}
}
}
| |
| getOption(string $option, $defaultValue = null) | Возвращает значение опции $option. Если опция не задана, вернет значение по умолчанию $defaultValue. |