Drupal 8 variable_get

9

Eu tenho algum código no Drupal 7 que está usando variable_get. Agora eu gostaria de escrever o código no Drupal 8. Então, eu estava lendo isso, mas não me ajudou muito.

Como escrever esse código no Drupal 8 a partir do código no Drupal 7?

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

ou isto

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

Alguma sugestão.

SakaSerbia
fonte

Respostas:

16

No Drupal 7

 $data =  variable_get('test_content_types');

No Drupal 8

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

Para obter mais informações sobre a visita "obter", "definir", "excluir" - Etapa 5: Como atualizar as variáveis ​​D7 para o sistema de estados do D8 .

itsdarrylnorris
fonte
Obrigado @ darol100 .. O link é bom .. Agora eu entendo. Então eu posso escrever $ data = \ Drupal :: state () -> get ('test_content_types', array ());
SakaSerbia
7
Esteja ciente de que no D8 há uma diferença entre estado e configuração. Conforme observado em drupal.org/developing/api/8/configuration : "A configuração é um local para armazenar informações que você deseja sincronizar do desenvolvimento à produção. Essas informações geralmente são criadas durante a criação do site e geralmente não são geradas por usuários comuns durante a operação normal do site. Você deve usar a API do estado, não a configuração, para armazenar variáveis ​​locais que não devem se deslocar entre instâncias. Use o estado para valores ocultos do sistema e se você nunca quiser implantá-lo entre ambientes ".
marcvangend
5

A resposta aceita é metade da resposta. Como observa Marcvangend, existem duas opções no Drupal 8 para o que costumava ser armazenado na tabela de variáveis ​​e foi armazenado e recuperado com variable_set()e variable_get(). O primeiro, documentado na resposta de darol100, é a API do estado .

A segunda é a API de configuração e deve ser usada na maioria dos casos em que você possui um formulário de configuração. Requer no mínimo em seu módulo um arquivo de instalação de configuração, por exemplo config/install/example.settings.yml. Para uma única parte da configuração (com vários valores potenciais), esse arquivo pode conter apenas, por exemplo:

test_content_types: - article

E então use o valor com:

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

Ou altere os valores armazenados com:

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

Veja também a documentação do Drupal 8 para atualizações de configuração de D7 a D8 e uso de configuração em módulos .

mlncn
fonte
11
Para mim, esta é a resposta correta para a pergunta. Atualmente, estou fazendo a transição do Drupal 7 e isso me ajudou muito.
Geat