Drupal 8 variable_get

9

J'ai du code dans Drupal 7 qui utilise variable_get. Maintenant, je voudrais écrire le code dans Drupal 8. Donc je lisais ça mais ça ne m'a pas beaucoup aidé.

Comment écrire ce code dans Drupal 8 à partir de code dans Drupal 7?

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

ou ca

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

Une suggestion.

SakaSerbia
la source

Réponses:

16

Dans Drupal 7

 $data =  variable_get('test_content_types');

Dans Drupal 8

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

Pour plus d'informations sur "get", "set", "delete" visitez - Étape 5: Comment mettre à niveau les variables D7 vers le système d'état de D8 .

itsdarrylnorris
la source
Merci @ darol100 .. Le lien est sympa .. Maintenant je comprends. Je peux donc écrire $ data = \ Drupal :: state () -> get ('test_content_types', array ());
SakaSerbia
7
Sachez qu'en D8 il y a une différence entre état et config. Comme indiqué sur drupal.org/developing/api/8/configuration : "La configuration est un endroit pour stocker des informations que vous souhaitez synchroniser du développement à la production. Ces informations sont souvent créées pendant la construction du site et ne sont généralement pas générées par des utilisateurs réguliers pendant le fonctionnement normal du site. Vous devez utiliser l'API d'état, et non la configuration, pour stocker les variables locales qui ne doivent pas voyager entre les instances. Utilisez l'état pour les valeurs système masquées et si vous ne souhaitez jamais le déployer entre les environnements. "
marcvangend
5

La réponse acceptée est la moitié de la réponse. Comme le note marcvangend, il existe deux options dans Drupal 8 pour ce qui était auparavant stocké dans la table des variables et qui a été stocké et récupéré avec variable_set()et variable_get(). La première, documentée dans la réponse de darol100, est l' API State .

La seconde est l' API de configuration et doit être utilisée dans la plupart des cas où vous avez un formulaire de configuration. Il nécessite au minimum dans votre module un fichier d'installation de configuration, par exemple config/install/example.settings.yml. Pour une seule configuration (avec plusieurs valeurs potentielles), ce fichier pourrait simplement contenir par exemple:

test_content_types: - article

Et puis utilisez la valeur avec:

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

Ou modifiez les valeurs enregistrées avec:

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

Voir également la documentation Drupal 8 pour les mises à niveau de configuration D7 à D8 et l' utilisation de la configuration dans les modules .

mlncn
la source
1
Pour moi, c'est la bonne réponse à la question. Je fais actuellement la transition de Drupal 7 et cela m'a beaucoup aidé.
Geat