/** * @return \Magento\Framework\Controller\ResultInterface */ public function execute() { /** @var \Magento\Framework\Controller\Result\Json $resultJson */ $resultJson = $this->jsonFactory->create(); $error = false; $messages = []; $postItems = $this->getRequest()->getParam('items', []); if (!($this->getRequest()->getParam('isAjax') && count($postItems))) { return $resultJson->setData(['messages' => [__('Please correct the data sent.')], 'error' => true]); } foreach (array_keys($postItems) as $pageId) { /** @var \Magento\Cms\Model\Page $page */ $page = $this->pageRepository->getById($pageId); try { $pageData = $this->filterPost($postItems[$pageId]); $this->validatePost($pageData, $page, $error, $messages); $extendedPageData = $page->getData(); $this->setCmsPageData($page, $extendedPageData, $pageData); $this->pageRepository->save($page); } catch (\Magento\Framework\Exception\LocalizedException $e) { $messages[] = $this->getErrorWithPageId($page, $e->getMessage()); $error = true; } catch (\RuntimeException $e) { $messages[] = $this->getErrorWithPageId($page, $e->getMessage()); $error = true; } catch (\Exception $e) { $messages[] = $this->getErrorWithPageId($page, __('Something went wrong while saving the page.')); $error = true; } } return $resultJson->setData(['messages' => $messages, 'error' => $error]); }
/** * Test search \Magento\Cms\Api\Data\PageInterface */ public function testSearch() { $pageTitle = 'Page title'; $pageIdentifier = 'page-title' . uniqid(); /** @var \Magento\Cms\Api\Data\PageInterface $pageDataObject */ $pageDataObject = $this->pageFactory->create(); $pageDataObject->setTitle($pageTitle)->setIdentifier($pageIdentifier); $this->currentPage = $this->pageRepository->save($pageDataObject); $filterBuilder = Bootstrap::getObjectManager()->create('Magento\\Framework\\Api\\FilterBuilder'); $searchCriteriaBuilder = Bootstrap::getObjectManager()->create('Magento\\Framework\\Api\\SearchCriteriaBuilder'); $filter = $filterBuilder->setField(PageInterface::IDENTIFIER)->setValue($pageIdentifier)->create(); $searchCriteriaBuilder->addFilter([$filter]); $searchData = $searchCriteriaBuilder->create()->__toArray(); $requestData = ['searchCriteria' => $searchData]; $serviceInfo = ['rest' => ['resourcePath' => self::RESOURCE_PATH . "/search" . '?' . http_build_query($requestData), 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET], 'soap' => ['service' => self::SERVICE_NAME, 'serviceVersion' => self::SERVICE_VERSION, 'operation' => self::SERVICE_NAME . 'GetList']]; $searchResult = $this->_webApiCall($serviceInfo, $requestData); $this->assertEquals(1, $searchResult['total_count']); $this->assertEquals($searchResult['items'][0][PageInterface::IDENTIFIER], $pageIdentifier); }