Skip to content

Commit ca2fa02

Browse files
ENGCOM-7102: #26749: Saving CMS Page Title from REST web API makes content empty #27237
- Merge Pull Request #27237 from engcom-Charlie/magento2:24704 - Merged commits: 1. f91aff1 2. e74825a
2 parents a66a2d5 + e74825a commit ca2fa02

File tree

3 files changed

+157
-63
lines changed

3 files changed

+157
-63
lines changed

app/code/Magento/Cms/Model/PageRepository.php

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,21 @@
99
use Magento\Cms\Api\Data;
1010
use Magento\Cms\Api\PageRepositoryInterface;
1111
use Magento\Cms\Model\Page\IdentityMap;
12+
use Magento\Cms\Model\ResourceModel\Page as ResourcePage;
13+
use Magento\Cms\Model\ResourceModel\Page\CollectionFactory as PageCollectionFactory;
1214
use Magento\Framework\Api\DataObjectHelper;
1315
use Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface;
1416
use Magento\Framework\App\ObjectManager;
17+
use Magento\Framework\EntityManager\HydratorInterface;
1518
use Magento\Framework\Exception\CouldNotDeleteException;
1619
use Magento\Framework\Exception\CouldNotSaveException;
1720
use Magento\Framework\Exception\NoSuchEntityException;
1821
use Magento\Framework\Reflection\DataObjectProcessor;
19-
use Magento\Cms\Model\ResourceModel\Page as ResourcePage;
20-
use Magento\Cms\Model\ResourceModel\Page\CollectionFactory as PageCollectionFactory;
2122
use Magento\Store\Model\StoreManagerInterface;
2223

2324
/**
24-
* Class PageRepository
25+
* @inheritdoc
26+
*
2527
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
2628
*/
2729
class PageRepository implements PageRepositoryInterface
@@ -76,6 +78,11 @@ class PageRepository implements PageRepositoryInterface
7678
*/
7779
private $identityMap;
7880

81+
/**
82+
* @var HydratorInterface
83+
*/
84+
private $hydrator;
85+
7986
/**
8087
* @param ResourcePage $resource
8188
* @param PageFactory $pageFactory
@@ -87,6 +94,7 @@ class PageRepository implements PageRepositoryInterface
8794
* @param StoreManagerInterface $storeManager
8895
* @param CollectionProcessorInterface $collectionProcessor
8996
* @param IdentityMap|null $identityMap
97+
* @param HydratorInterface|null $hydrator
9098
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
9199
*/
92100
public function __construct(
@@ -99,7 +107,8 @@ public function __construct(
99107
DataObjectProcessor $dataObjectProcessor,
100108
StoreManagerInterface $storeManager,
101109
CollectionProcessorInterface $collectionProcessor = null,
102-
?IdentityMap $identityMap = null
110+
?IdentityMap $identityMap = null,
111+
?HydratorInterface $hydrator = null
103112
) {
104113
$this->resource = $resource;
105114
$this->pageFactory = $pageFactory;
@@ -111,6 +120,7 @@ public function __construct(
111120
$this->storeManager = $storeManager;
112121
$this->collectionProcessor = $collectionProcessor ?: $this->getCollectionProcessor();
113122
$this->identityMap = $identityMap ?? ObjectManager::getInstance()->get(IdentityMap::class);
123+
$this->hydrator = $hydrator ?: ObjectManager::getInstance()->get(HydratorInterface::class);
114124
}
115125

116126
/**
@@ -150,8 +160,13 @@ public function save(\Magento\Cms\Api\Data\PageInterface $page)
150160
$storeId = $this->storeManager->getStore()->getId();
151161
$page->setStoreId($storeId);
152162
}
163+
$pageId = $page->getId();
164+
153165
try {
154166
$this->validateLayoutUpdate($page);
167+
if ($pageId) {
168+
$page = $this->hydrator->hydrate($this->getById($pageId), $this->hydrator->extract($page));
169+
}
155170
$this->resource->save($page);
156171
$this->identityMap->add($page);
157172
} catch (\Exception $exception) {
@@ -248,6 +263,7 @@ private function getCollectionProcessor()
248263
{
249264
if (!$this->collectionProcessor) {
250265
$this->collectionProcessor = \Magento\Framework\App\ObjectManager::getInstance()->get(
266+
// phpstan:ignore "Class Magento\Cms\Model\Api\SearchCriteria\PageCollectionProcessor not found."
251267
\Magento\Cms\Model\Api\SearchCriteria\PageCollectionProcessor::class
252268
);
253269
}

app/code/Magento/Cms/etc/di.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@
193193
<type name="Magento\Cms\Model\PageRepository">
194194
<arguments>
195195
<argument name="collectionProcessor" xsi:type="object">Magento\Cms\Model\Api\SearchCriteria\PageCollectionProcessor</argument>
196+
<argument name="hydrator" xsi:type="object">Magento\Framework\EntityManager\AbstractModelHydrator</argument>
196197
</arguments>
197198
</type>
198199
<virtualType name="Magento\Cms\Model\Api\SearchCriteria\CollectionProcessor\BlockFilterProcessor" type="Magento\Framework\Api\SearchCriteria\CollectionProcessor\FilterProcessor">

0 commit comments

Comments
 (0)