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