web-dev-qa-db-fra.com

Comment remplacer la configuration d'un fichier?

J'ai joué beaucoup récemment avec une configuration d'importation vers Drupal 8. Et je remarque que toute la documentation vous montre comment modifier la valeur par valeur au lieu de remplacer le fichier de configuration entier. Vous pouvez trouver plus informations à ce sujet sur Configuration override system page.

Je remarque que DrupalConsole et Drush ont la capacité de remplacer la configuration par fichier.

  • À l'aide de Drush, vous pouvez exécuter drush config-import
  • En utilisant DrupalConsole, vous pouvez exécuter drupal config-import

Cela remplacera toute la base de configuration du fichier de configuration. Comment puis-je y parvenir sur le code? J'espère que j'aimerai modifier ma configuration lorsque j'installe mon module sur hook_install .

6
itsdarrylnorris

Remplacer la configuration du code est simple. Ci-dessus est un exemple comment vous obtenez, définissez et enregistrez n'importe quelle configuration (que vous venez d'installer via .yml et à partir du noyau).

Sur le fichier .install ou .module

  //Getting editable configs
  $module_cfg = \Drupal::configFactory()->getEditable('your.module.file');
  $settings = \Drupal::configFactory()->getEditable('any_core.settings');
  //Getting values
  $a_value = $settings->get('key_from_core');
  //Setting and save configs
  $module_cfg->set('any.key', $a_value)->save();
  $settings->set('key', 'new_value')->save();

Depuis hook_install docs :

Les implémentations de ce hook sont par convention déclarées dans le fichier .install du module.

Pour plus d'informations, voir ConfigFactory docs .

Il existe un module appelé Fonctionnalités qui vous aide si vous souhaitez garder une trace de vos configurations. J'utilise actuellement ce module pour le développement piloté par le code, c'est peut-être ce que vous recherchez.

Édition 1 - Remplacer la configuration entière

Tout d'abord, vous devez fournir la configuration que vous prétendez ignorer.

Sur le fichier my.custom.config.yml

# Make sure this config exists in your database
target: 'config.to.override'
... # all your data (CAUTION with 'dependencies')

Sur le fichier .install

function module_install() {
  //Get your custom config
  $cfg = \Drupal::configFactory()->getEditable('my.custom.config');
  //Get config name to override
  $target = $cfg->get('target');
  //Get Config object
  $settings = \Drupal::configFactory()->getEditable($target);
  //Override all data that can be overridden
  $settings->setData($cfg->get())->save();
  //If you won't store any previous state, get rid of your custom config
  $cfg->delete();
}

Cela a été testé dans mon environnement de développement.

8
Vagner

Je laisse ici un autre exemple, en plus de @ la réponse de Vagner , au cas où cela serait utile.

Le scénario est le suivant: Je voudrais remplacer addtoany's les paramètres.

Les paramètres du module sont situés dans modules/contrib/addtoany/config/install/addtoany.settings.yml.

Pour les remplacer, créez un module personnalisé foobar et un fichier modules/custom/foobar/config/install/foobar.addtoany.settings.yml:

buttons_size: 32
additional_html: |
  <a class="a2a_button_facebook"></a>
  <a class="a2a_button_Twitter"></a>
additional_css: ''
additional_js: ''
universal_button: none
custom_universal_button: ''
universal_button_placement: before
no_3p: false

Dans modules/custom/foobar/foobar.install, appliquez les nouveaux paramètres:

<?php

function foobar_install()
{
  // Get your custom config
  $cfg = \Drupal::configFactory()->getEditable('foobar.addtoany.settings');
  // Get Config object
  $settings = \Drupal::configFactory()->getEditable('addtoany.settings');
  // Override all data that can be overridden
  $settings->setData($cfg->get())->save();
  // Get rid of your custom config
  $cfg->delete();
}
4
turdus-merula
Apparemment, nous devons définir toutes les entrées, même celles que nous ne voulons pas modifier

C'était peut-être le cas, mais actuellement je viens d'utiliser l'exemple ci-dessus dans 4 (merci turdus-merula) pour remplacer seulement deux des paramètres des modules Devel. Les autres restent intacts.

[modifier: impossible d'ajouter mon commentaire directement à la réponse de dxvargas à laquelle il se rapporte]

0
Jonathan1055