Перейти к основному содержимому

ControlsRegistry

Класс обертка на методом Controls_Stack::add_control, позволяет вместо добавления всех полей управления по одному с помощью метода add_control описать их все в массиве данных.

Для создания группы полей управления нужно наследоваться от класса ControlsRegistry и в конструкторе класса переопределить свойство ControlsRegistry::$controls, добавив в него массив данных, где ключом выступает id поля управления, а значением массив-конфигурация для создания поля.

Далее нужно воспользоваться методом Controls_Stack::add_controls( Controls_Stack $controls_stack ): Controls_Stack и передать в него виджет, к которому требуется добавить поля.

Например добавим класс для добавления поля логирования в виджет:

class ConsoleLog extends ControlsRegistry {
public function __construct( string $slug ) {
parent::__construct( $slug );

$this->controls = [
'log_text' => [
'label' => 'Console.log',
'type' => Controls_Manager::TEXT,
'condition' => [
$this->slug . '_action' => Type::LOG->value,
],
],
];
}
}

// Где-то в другом месте кода
(new ConsoleLog)->add_controls($widget);

Таким образом мы переходим от императивного программирования, в котором нужно указывать каждое действие, к декларативному, где нужно лишь указать конфигурацию, а как она будет обрабатываться нас уже не интересует

Для более удобного добавления полей управления на основе класса ControlsRegistry можно добавить фабрику классов, как например в Triggers/Actions/Fabric::get_control