diff --git a/core/modules/link/src/Plugin/Field/FieldType/LinkItem.php b/core/modules/link/src/Plugin/Field/FieldType/LinkItem.php index e25e9c6..0b1709b 100644 --- a/core/modules/link/src/Plugin/Field/FieldType/LinkItem.php +++ b/core/modules/link/src/Plugin/Field/FieldType/LinkItem.php @@ -177,6 +177,15 @@ public function getUrl() { * {@inheritdoc} */ public function setValue($values, $notify = TRUE) { + // The main property for LinkItem is uri so if value is not array then it + // should be a uri. + if (isset($values) && !is_array($values)) { + $values = ['uri' => $values]; + } + $values += [ + 'title' => NULL, + 'options' => [], + ]; // Unserialize the values. // @todo The storage controller should take care of this, see // SqlContentEntityStorage::loadFieldItems, see @@ -184,9 +193,6 @@ public function setValue($values, $notify = TRUE) { if (isset($values['options']) && is_string($values['options'])) { $values['options'] = unserialize($values['options']); } - if (!is_string($values) && !isset($values['options'])) { - $values['options'] = []; - } parent::setValue($values, $notify); } diff --git a/core/modules/link/src/Tests/LinkItemTest.php b/core/modules/link/src/Tests/LinkItemTest.php index 6c4bc9a..352d909 100644 --- a/core/modules/link/src/Tests/LinkItemTest.php +++ b/core/modules/link/src/Tests/LinkItemTest.php @@ -110,6 +110,11 @@ public function testLinkItem() { $this->assertEqual($entity->field_test->uri, 'internal:/node/add'); $this->assertNull($entity->field_test->title); $this->assertIdentical($entity->field_test->options, []); + + $entity->field_test = 'internal:/node/add'; + $this->assertEqual($entity->field_test->uri, 'internal:/node/add'); + $this->assertNull($entity->field_test->title); + $this->assertIdentical($entity->field_test->options, []); } }