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