web-dev-qa-db-ja.com

D8カスタムモジュールのインストール/アンインストール-IDを持つ 'field_storage_config'エンティティは既に存在します

基本的に、D8標準インストールプロファイルに付属するArticle CT .ymlファイルのレプリカであるカスタムモジュールを作成しました。

カスタムモジュールをインストールすると、期待通りのものがすべて作成されました。次に、それを無効にしてから再度有効にすると、モジュールが再インストールされず、次のエラーが発生します。

Drupal\Core\Entity\EntityStorageException:ID 'node.custom_field'の 'field_storage_config'エンティティは既に存在します。

最初にこの問題を解決するには、モジュールをnode.type.ymlの強制依存として宣言しました

langcode: en
status: true
dependencies:
   module:
    - menu_ui
   enforced:
     module:
       - custom_module

これはbodyフィールドで機能し、重複IDエラーが発生することなくモジュールを有効/無効にすることができました。しかし、画像フィールドを追加するとすぐにIDが重複し、モジュールを再度有効にすることはできません。 IDは一意であり、有効にする前にIDを変更するとモジュールは有効になりますが、これは受け入れられません。

編集:CTから画像フィールドを削除した後に表示され、ボディフィールドが同じエラーの影響を受けています。したがって、モジュールの強制は機能しません。

これはconfig/installフォルダー内にあるためだと思いますが、インストール時にコンテンツタイプをインストールするカスタムモジュールの例はありません。少なくとも現時点では見つかりません。

私の質問は:カスタムモジュールを有効にするときにコンテンツタイプを追加する適切な方法は何ですか?

カスタムモジュールを無効/有効にするときにコンテンツタイプをインストールするときに重複IDエラーを回避する方法

2
DMAC

最初のインストール時またはアンインストール後に、config/optionalディレクトリにファイルを配置してみてください(すでに存在するため)。すべての依存関係が満たされている場合、最初のインストールでもインストールされます。ドキュメントから:

たとえば、モジュールAにモジュールBを必要とするオプションの構成があるが、モジュールAが最初にインストールされ、しばらくしてからモジュールBがインストールされるシナリオでは、モジュールAのconfig/optionalディレクトリがその時点でスキャンされ、新しく満たされた依存関係が確認されます。設定がインストールされます。モジュールBがインストールされていない場合、オプションの構成アイテムもインストールされません。

https://www.drupal.org/docs/8/api/configuration-api/configuration-storage-in-drupal-8

1
Chris Mitchell