diff --git a/core/modules/quickedit/src/MetadataGenerator.php b/core/modules/quickedit/src/MetadataGenerator.php index f01256f..3563f9f 100644 --- a/core/modules/quickedit/src/MetadataGenerator.php +++ b/core/modules/quickedit/src/MetadataGenerator.php @@ -73,7 +73,11 @@ public function generateFieldMetadata(FieldItemListInterface $items, $view_mode) } // Early-return if no editor is available. - $formatter_id = EntityViewDisplay::collectRenderDisplay($entity, $view_mode)->getRenderer($field_name)->getPluginId(); + $formatter = EntityViewDisplay::collectRenderDisplay($entity, $view_mode)->getRenderer($field_name); + if (empty($formatter)) { + return ['access' => FALSE]; + } + $formatter_id = $formatter->getPluginId(); $editor_id = $this->editorSelector->getEditor($formatter_id, $items); if (!isset($editor_id)) { return ['access' => FALSE]; diff --git a/core/modules/quickedit/tests/src/Kernel/MetadataGeneratorTest.php b/core/modules/quickedit/tests/src/Kernel/MetadataGeneratorTest.php index 75f3030..ef4d2d5 100644 --- a/core/modules/quickedit/tests/src/Kernel/MetadataGeneratorTest.php +++ b/core/modules/quickedit/tests/src/Kernel/MetadataGeneratorTest.php @@ -87,11 +87,25 @@ public function testSimpleEntityType() { 'number_integer', [] ); + $field_3_name = 'field_without_formatter'; + $field_3_label = 'A field without a formatter'; + $this->createFieldWithStorage( + $field_3_name, 'integer', 1, $field_3_label, + // Instance settings. + [], + // Widget type & settings. + NULL, + [], + // no formatter available. + NULL, + [] + ); // Create an entity with values for this text field. $entity = EntityTest::create(); $entity->{$field_1_name}->value = 'Test'; $entity->{$field_2_name}->value = 42; + $entity->{$field_3_name}->value = 1; $entity->save(); $entity = EntityTest::load($entity->id()); @@ -114,6 +128,14 @@ public function testSimpleEntityType() { 'editor' => 'form', ]; $this->assertEqual($expected_2, $metadata_2, 'The correct metadata is generated for the second field.'); + + // Verify metadata for field 3. + $items_3 = $entity->get($field_3_name); + $metadata_3 = $this->metadataGenerator->generateFieldMetadata($items_3, 'default'); + $expected_3 = [ + 'access' => FALSE, + ]; + $this->assertEqual($expected_3, $metadata_3, 'No metadata is generated for the third field.'); } /** diff --git a/core/modules/quickedit/tests/src/Kernel/QuickEditTestBase.php b/core/modules/quickedit/tests/src/Kernel/QuickEditTestBase.php index 8cc2d2f..f008585 100644 --- a/core/modules/quickedit/tests/src/Kernel/QuickEditTestBase.php +++ b/core/modules/quickedit/tests/src/Kernel/QuickEditTestBase.php @@ -86,20 +86,24 @@ protected function createFieldWithStorage($field_name, $type, $cardinality, $lab ]); $this->fields->$field->save(); - entity_get_form_display('entity_test', 'entity_test', 'default') - ->setComponent($field_name, [ - 'type' => $widget_type, - 'settings' => $widget_settings, - ]) - ->save(); + if (!empty($widget_type)) { + entity_get_form_display('entity_test', 'entity_test', 'default') + ->setComponent($field_name, [ + 'type' => $widget_type, + 'settings' => $widget_settings, + ]) + ->save(); + } - entity_get_display('entity_test', 'entity_test', 'default') - ->setComponent($field_name, [ - 'label' => 'above', - 'type' => $formatter_type, - 'settings' => $formatter_settings, - ]) - ->save(); + if (!empty($formatter_type)) { + entity_get_display('entity_test', 'entity_test', 'default') + ->setComponent($field_name, [ + 'label' => 'above', + 'type' => $formatter_type, + 'settings' => $formatter_settings, + ]) + ->save(); + } } }