Drupal 8 variable_get

9

Tengo un código en Drupal 7 que usa variable_get. Ahora me gustaría escribir el código en Drupal 8. Así que estaba leyendo esto, pero no me ayudó mucho.

¿Cómo escribir este código en Drupal 8 desde el código en Drupal 7?

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

o esto

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

Alguna sugerencia.

SakaSerbia
fuente

Respuestas:

16

En Drupal 7

 $data =  variable_get('test_content_types');

En Drupal 8

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

Para obtener más información sobre la visita "get", "set", "delete" - Paso 5: Cómo actualizar las variables D7 al sistema de estado de D8 .

itsdarrylnorris
fuente
Gracias @ darol100 ... El enlace es bueno ... Ahora lo entiendo. Entonces puedo escribir $ data = \ Drupal :: state () -> get ('test_content_types', array ());
SakaSerbia
77
Tenga en cuenta que en D8 hay una diferencia entre estado y configuración. Como se señaló en drupal.org/developing/api/8/configuration : "La configuración es un lugar para almacenar información que desea sincronizar desde el desarrollo hasta la producción. Esta información a menudo se crea durante la construcción del sitio y no suele ser generada por usuarios habituales durante el funcionamiento normal del sitio. Debe usar la API de estado, no la configuración, para almacenar variables locales que no deberían viajar entre instancias. Use el estado para valores ocultos del sistema y si nunca desea implementarlo entre entornos ".
marcvangend
5

La respuesta aceptada es la mitad de la respuesta. Como señala marcvangend, hay dos opciones en Drupal 8 para lo que se almacenaba en la tabla de variables y se almacenaba y recuperaba con variable_set()y variable_get(). El primero, documentado en la respuesta de darol100, es la API de estado .

El segundo es la API de configuración y debe usarse en la mayoría de los casos en los que tiene un formulario de configuración. Requiere como mínimo en su módulo un archivo de instalación de configuración, por ejemplo config/install/example.settings.yml. Para una sola pieza de configuración (con múltiples valores potenciales), ese archivo podría contener, por ejemplo:

test_content_types: - article

Y luego use el valor con:

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

O cambie los valores almacenados con:

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

Consulte también la documentación de Drupal 8 para las actualizaciones de configuración de D7 a D8 y el uso de la configuración en módulos .

mlncn
fuente
1
Para mí, esta es la respuesta correcta a la pregunta. Actualmente estoy haciendo la transición de Drupal 7 y me ayudó mucho.
Geat