Jak mogę dodać nowe pole z configu w hook_update_N? [duplikować]
Muszę dodać taksonomię według kodu php. Taksonomia musi mieć 2 pola. Dodałem nową funkcję do test_taxonomy.install i wygląda na to, że działa:
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();
}
Dodano nowe słownictwo do taksonomii.
Zawartość pliku:
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
Problematyczne jest to, że próbuję dodać pola do słownika. Utworzyłem 2 pliki
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
Ale nie jestem pewien, jak mogę je załadować w funkcji update_xxx.
EDYCJA: próbowałem
\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();
ale otrzymuję Brakujący pakiet dla typu jednostki taxonomy_term podczas próby aktualizacji modułu
Odpowiedzi
Tak, nie możesz tworzyć treści przed zaimportowaniem konfiguracji zależnej. To klasyczny Drupal 8 paradoks , który niedawno został rozwiązany przez nowego haka: hook_deploy_NAME(&$sandbox).
Zaktualizuj do najnowszej wersji Drush i od teraz uruchom ją drush deploy
jako część procedury wdrażania, która zastępuje starą drush updb && drush cim
procedurę. Następnie należy utworzyć nowy plik w module: MYMODULE.deploy.php
. W tym narzędziu, MYMODULE_deploy_NAME(&$sandbox)
gdzie NAME
może być dowolna unikalna nazwa (lub również rosnąca liczba). Użyj tego haka, aby utworzyć terminy, takie same jak w hook_update_N(&$sandbox)
pytaniu.
drush deploy
zapewni, że ten punkt zaczepienia zostanie pobrany na końcu procedury wdrażania, po utworzeniu konfiguracji zależnej z importu konfiguracji.