Drupal 8 variable_get

9

У меня есть некоторый код в Drupal 7, который использует variable_get. Теперь я хотел бы написать код на Drupal 8. Итак, я читал это, но это мне не сильно помогло.

Как написать этот код в Drupal 8 из кода в Drupal 7?

$types = array_values(variable_get('test_content_types', array()));

или это

'#default_value' => variable_get('test_content_types', array()),

Некоторое предложение.

SakaSerbia
источник

Ответы:

16

В Друпале 7

 $data =  variable_get('test_content_types');

В Друпале 8

 $data = \Drupal::state()->get('test_content_types'); 

Для получения дополнительной информации о «get», «set», «delete» посещении - Шаг 5: Как обновить переменные D7 до системы состояний D8 .

itsdarrylnorris
источник
Спасибо @ darol100 .. Ссылка хорошая .. Теперь я понимаю. Поэтому я могу написать $ data = \ Drupal :: state () -> get ('test_content_types', array ());
SakaSerbia
7
Имейте в виду, что в D8 есть разница между состоянием и конфигом. Как отмечено на drupal.org/developing/api/8/configuration : «Конфигурация - это место для хранения информации, которую вы хотите синхронизировать от разработки до производства. Эта информация часто создается во время создания сайта и обычно не генерируется обычными пользователями во время нормальной работы сайта. Вы должны использовать API состояния, а не конфигурацию, для хранения локальных переменных, которые не должны перемещаться между экземплярами. Используйте состояние для скрытых системных значений, и если вы никогда не хотите развертывать его между средами. "
marcvangend
5

Принятый ответ - половина ответа. Как отмечает marcvangend, в Drupal 8 есть две опции для того, что раньше хранилось в таблице переменных и было сохранено и получено с помощью variable_set()и variable_get(). Первым, задокументированным в ответе darol100, является State API .

Второй - это API-интерфейс конфигурации, который следует использовать в большинстве случаев, когда у вас есть форма конфигурации. Например, для вашего модуля требуется как минимум установочный файл конфигурации config/install/example.settings.yml. Для одного элемента конфигурации (с несколькими потенциальными значениями) этот файл может содержать, например:

test_content_types: - article

И затем используйте значение с:

$types = \Drupal::config('example.settings')->get('test_content_types');

Или измените сохраненные значения с помощью:

\Drupal::service('config.factory')
  ->getEditable('example.settings')
  ->set('test_content_types', ['article', 'page'])
  ->save();

См. Также документацию по Drupal 8 для обновлений конфигурации D7 до D8 и использования конфигурации в модулях .

mlncn
источник
1
Для меня это правильный ответ на вопрос. В настоящее время я делаю переход с Drupal 7, и это мне очень помогло.
Geat