Issue #3013197 by tim.plunkett: Cloning an implementation of SectionListInterface does not deep clone the Section or SectionComponent objects

8.7.x
Alex Pott 2018-11-14 12:48:46 +00:00
parent edfebee539
commit cd6c671028
No known key found for this signature in database
GPG Key ID: 31905460D4A69276
3 changed files with 33 additions and 0 deletions

View File

@ -356,4 +356,13 @@ class Section {
);
}
/**
* Magic method: Implements a deep clone.
*/
public function __clone() {
foreach ($this->components as $uuid => $component) {
$this->components[$uuid] = clone $component;
}
}
}

View File

@ -111,4 +111,17 @@ trait SectionStorageTrait {
return isset($this->getSections()[$delta]);
}
/**
* Magic method: Implements a deep clone.
*/
public function __clone() {
$sections = $this->getSections();
foreach ($sections as $delta => $item) {
$sections[$delta] = clone $item;
}
$this->setSections($sections);
}
}

View File

@ -137,6 +137,17 @@ abstract class SectionStorageTestBase extends EntityKernelTestBase {
$this->assertSections($expected);
}
/**
* Tests __clone().
*/
public function testClone() {
$this->assertSame([], $this->sectionStorage->getSection(0)->getLayoutSettings());
$new_section_storage = clone $this->sectionStorage;
$new_section_storage->getSection(0)->setLayoutSettings(['asdf' => 'qwer']);
$this->assertSame([], $this->sectionStorage->getSection(0)->getLayoutSettings());
}
/**
* Asserts that the field list has the expected sections.
*