В Drupal 8 появился унифицированный способ хранения дополнительных настроек в чужих config entities и plugins. Способ называется Third Party Settings.
О чём вообще речь? Например нужно добавить нодам новый функционал — возможность скрывать заголовок у определённого типа нод. В Drupal 7 мы бы альтернули форму редактирования типа материала, добавили чекбокс "Скрывать заголовок", навесили на форму свой #submit
и в нём бы сохранили значение этой опции с помощью variable_set()
. Некоторые модули для этого создавали отдельные таблицы в базе, другие хранили настройки в data атрибуте сущности, но единого способа хранения пользовательских опций не было.
В восьмёрке же все config entities и плагины расширяют ThirdPartySettingsInterface
, что делает доступным два основных метода — setThirdPartySetting()
и getThirdPartySetting()
, которые позволяют сохранять и получать значения дополнительных свойств.
Пример:
/**
* Implements hook_form_FORM_ID_alter(): node_type_edit_form.
*/
function modulename_form_node_type_edit_form_alter(array &$form, FormStateInterface $form_state) {
/** @var NodeTypeInterface $node_type */
$node_type = $form_state->getFormObject()->getEntity();
$form['hide_title'] = [
'#type' => 'checkbox',
'#title' => t('Hide title'),
'#default_value' => $node_type->getThirdPartySetting('modulename', 'hide_title'),
];
$form['#entity_builders'][] = 'modulename_node_type_edit_form_entity_builder';
}
/**
* Node type form entity builder callback.
*/
function modulename_node_type_edit_form_entity_builder($entity_type, NodeTypeInterface $node_type, &$form, FormStateInterface $form_state) {
$node_type->setThirdPartySetting('modulename', 'hide_title', $form_state->getValue('hide_title'));
}
Сохранённые таким способом данные будут корректно экспортироваться и импортироваться штатным менеджером конфигураций.
Комментарии
А ещё они корректно удаляются при удалении модуля, который их обслуживает
Добавить комментарий