Puncte:0

Error when instantiating custom field in custom module

drapel nl

I apologize if the answer to this is obvious, but I am newly-embarked on porting a number of complex custom Drupal 7 modules to Drupal 9. I am using Drupal version 9.3.6, PHP version 7.4.28, mysql, apache2. I have created a custom field as follows, which on install goes without errors and appears in the field list report:

langcode: en
status: true
dependencies:
  module:
    - user
  enforced:
    module:
      - test_module
id: user.field_test
field_name: field_test
entity_type: user
type: string_long
settings:
  case_sensitive: false
module: core
locked: false
cardinality: 1
translatable: true
indexes: {  }
persist_with_no_fields: false
custom_storage: false

But when I try to instantiate it, either with field.field.user.user.field_test.yml or manually through the UI, I get the following error stack:

 [warning] A non-numeric value encountered TypedConfigManager.php:189
 [error]  Error: Unsupported operand types in Drupal\Core\Config\TypedConfigManager->getDefinitionWithReplacements() (line 189 of /var/www/test_site/web/core/lib/Drupal/Core/Config/TypedConfigManager.php) #0 /var/www/test_site/web/core/lib/Drupal/Core/Config/TypedConfigManager.php(105): Drupal\Core\Config\TypedConfigManager->getDefinitionWithReplacements()

(Sorry, I had to delete the remainder of the stack dump to avoid getting flagged as spam!)

This is the part of TypedConfigManager as follows:

    // Add type and default definition class.
    $definition += [
      'definition_class' => '\Drupal\Core\TypedData\DataDefinition', // Here is line 189
      'type' => $type,
      'unwrap_for_canonical_representation' => TRUE,
    ];
    return $definition;

I am at a loss here. If I create the field storage through the admin interface and instantiate also through the admin interface, everything works fine. I export those definitions through the single export interface, and then I get the failure.

Thank you in advance for any insight!

Update: @Jaypan, here is the code for the field.field:

langcode: en
status: true
dependencies:
  config:
    - field.storage.user.field_test
  module:
    - user
  enforced:
    module:
      - test_module
id: user.user.field_test
field_name: field_test
entity_type: user
bundle: user
label: 'Test field'
description: ''
required: false
translatable: false
default_value: {  }
default_value_callback: ''
settings: {  }
field_type: string_long
Jaypan avatar
drapel de
Cred că câmpurile au două seturi de configurație, unul pentru câmpul de pe entitate și unul pentru stocare. Ai enumerat doar un set de configurații - poate că îți lipsește celălalt. Ceva de căutat.
Jennifer avatar
drapel nl
Mulțumesc, @Jaypan, dar le am pe amândouă. După cum am menționat, eroarea se întâmplă chiar și atunci când instanțiez manual. Dar pentru completitudine am inclus mai sus codul pentru field.field.
Puncte:0
drapel nl

Mi-am dat seama unde este problema. Faptul că instanțiarea câmpurilor (atât manual, cât și programatic) a declanșat eroarea nu are nicio legătură cu asta și încă nu înțeleg exact de ce, dar iată ce am învățat ștergând fișierele din modul unul câte unul: a Vederea pe care am creat-o manual și l-am exportat pentru modulul meu a cauzat aparent unele probleme în sistemul de configurare. Când am șters fișierul yml pentru vizualizare din config/schema, totul a fost bine activat. Dă-ți seama.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.