Comment puis-je ajouter un nouveau champ de config à l'intérieur de hook_update_N? [dupliquer]
Je dois ajouter la taxonomie par code php. La taxonomie doit avoir 2 champs. J'ai ajouté une nouvelle fonction à test_taxonomy.install, et cela semble fonctionner:
function taxonomy_update_8805() {
$config_path = 'modules/feature/test_taxonomy/config/update/'; $source = new FileStorage($config_path); \Drupal::entityManager()->getStorage('taxonomy_vocabulary') ->create($source->read('taxonomy.vocabulary.regulation'))
->save();
}
Ajout d'un nouveau vocabulaire à la taxonomie.
Contenu du dossier:
langcode: pl
status: true
dependencies:
module:
- test_remote_vocabulary
third_party_settings:
test_remote_vocabulary:
is_remote: 0
name: 'Test'
vid: regulation
description: 'Test desc'
hierarchy: 0
weight: 0
La partie problématique est quand j'essaye d'ajouter des champs au vocabulaire. J'ai créé 2 fichiers
field.storage.taxonomy_term.field_regulation_test.yml
langcode: pl
status: true
dependencies:
module:
- taxonomy
- text
id: taxonomy_term.regulation.test
field_name: test_field
entity_type: taxonomy_term
type: text_long
settings: { }
module: text
locked: false
cardinality: 1
translatable: true
indexes: { }
persist_with_no_fields: false
custom_storage: false
field.field.taxonomy_term.field_regulation_test.yml
langcode: pl
status: true
dependencies:
config:
- field.storage.taxonomy_term.field_regulation_test
- taxonomy.vocabulary.regulation
id: taxonomy_term.regulation.test
field_name: test_content
entity_type: taxonomy_term
bundle: regulation
label: TEST
description: 'Tekst test'
required: true
translatable: false
default_value: { }
default_value_callback: ''
settings: { }
field_type: text_long
Mais je ne sais pas comment puis-je les charger dans la fonction update_xxx.
EDIT: j'ai essayé
\Drupal::entityManager()->getStorage('taxonomy_term')
->create($source->read('field.storage.taxonomy_term.field_regulation_abo')) ->save(); \Drupal::entityManager()->getStorage('taxonomy_term') ->create($source->read('field.field.taxonomy_term.field_regulation_abo'))
->save();
mais je reçois un bundle manquant pour le type d'entité taxonomy_term en essayant de mettre à jour le module
Réponses
Oui, vous ne pouvez pas créer de contenu avant que la configuration de confiance n'ait été importée. C'est un paradoxe Drupal 8 classique qui vient récemment été résolu par un nouveau crochet: hook_deploy_NAME(&$sandbox).
Mettez à jour vers la dernière version de Drush et à partir de maintenant, exécutez-la drush deploy
dans le cadre de votre routine de déploiement, qui remplace l'ancienne drush updb && drush cim
routine. Ensuite , créez un nouveau fichier dans votre module: MYMODULE.deploy.php
. Dans la mise en œuvre, MYMODULE_deploy_NAME(&$sandbox)
où NAME
peut être n'importe quel nom unique (ou un nombre incrémentiel également). Et utilisez ce crochet pour créer les termes, comme hook_update_N(&$sandbox)
dans votre question.
drush deploy
s'assurera que ce hook sera récupéré au tout dernier dans la routine de déploiement, une fois que la configuration de confiance a été créée à partir de l'importation de configuration.