Drupal 8: State API или замена variable_get() и variabe_set()
Блог

Drupal 8: State API или замена variable_get() и variabe_set()

Хранение значений в БД Drupal 8.
1 комментарий
Опубликовано 16.10.2015
2 мин.

Часто при написании модуля, появляется необходимость записать какие-то данные в переменную, которую можно будет затем в любой момент поправить и использовать. Объявлять свою табличку в модуле для этого может оказаться жирным, а использование конфигураций - неоправданным. В Drupal 7 для этого были две функции variable_get() и variable_set(). В Drupal 8 они были заменены на State API.

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

  • Этот API будет использоваться для хранения какой-то системной информации;
  • Вы не хотите переносить данные настройки с сервера на сервер, а также из различных окружений (например с dev на production);
  • Эти данные не будут редактироваться пользователем через интерфейс.

Пример использования State API - хранение таймштампа последнего запуска cron операций.

Запись значений

Для записи используется пара ключ, значение.

\Drupal::state()->set('key','value');

Для множественной записи используется следующий код:

// $values - массив с парами ключ и значение.
$values = [
  'key' => 'value',
  'key2' => 'value2'
];
\Drupal::state()->setMultiple($values);

Получение данных

Получение одного значения по ключу.

$val = \Drupal::state()->get('key');

Получение сразу нескольких значений.

$keys = [
  'key',
  'key2'
];
$pairs = \Drupal::state()->getMultiple($keys);

Удаление данных

Удаление доступно лишь по одному значению.

\Drupal::state()->delete('key');

Вот так заменили две переменные на ООП вариант. С приходом конфигураций, надобность в них сильно уменьшится.

Drupal
Drupal 8
State API
небольшой уютный чатик

Комментарии

I
Ivan
пн, 03/04/2019 - 12:31

"Эти данные не будут редактироваться пользователем через интерфейс." - объясните, пожалуйста, почему не стоит использовать хранение данных в states, если я планирую редактировать их например в админке?