모든 CMS 페이지를 삭제해야합니다.
코드는 다음과 같습니다.
네임 스페이스 곧 \ Core \ Setup;
Magento \ Cms \ Api \ PageRepositoryInterface를 사용하십시오.
Magento \ Framework \ Api \ SearchCriteriaInterface를 사용하십시오.
Cms 클래스
{
/ **
* @var SearchCriteriaInterface
* /
개인 $ searchCriteria;
/ **
* @var PageRepositoryInterface
* /
개인 $ cmsPageRepository;
/ **
* Cms 생성자.
* @param SearchCriteriaInterface $ searchCriteria
* @param PageRepositoryInterface $ cmsPageRepository
* /
공공 함수 __construct (
SearchCriteriaInterface $ searchCriteria,
PageRepository 인터페이스 $ cmsPageRepository
)
{
$ this-> searchCriteria = $ searchCriteria;
$ this-> cmsPageRepository = $ cmsPageRepository;
}
/ **
* 기존 CMS 페이지를 모두 삭제
* /
공용 함수 cleanCmsPages ()
{
$ cmsPageCollection = $ this-> cmsPageRepository
-> getList ($ this-> searchCriteria)
-> getItems ();
foreach ($ cmsPageCollection을 $ cmsPage로) {
$ this-> cmsPageRepository-> 삭제 ($ cmsPage);
}
}
}
따라서 호출 \Soon\Core\Setup\Cms::cleanCmsPages하면 모든 CMS 페이지가 삭제되어야합니다.
그러나 그렇게 할 때이 오류가 발생합니다.
Argument 1 passed to Magento\Cms\Model\PageRepository::delete() must implement interface Magento\Cms\Api\Data\PageInterface, array given
그래서 나는 내에서 $cmsPage사용 된 것을 버리고 foreach ($cmsPageCollection as $cmsPage)실제로 $cmsPage배열 인 것처럼 보입니다 .
나는 코드를 파헤 쳤다.
\Magento\Cms\Api\PageRepositoryInterface::getList에 의해 구현됩니다 \Magento\Cms\Model\PageRepository::getList.
그러면에서 다음 \Magento\Cms\Model\PageRepository::getList과 같은 코드를 볼 수 있습니다.
$ pages [] = $ this-> dataObjectProcessor-> buildOutputDataArray (
$ pageData,
'마 젠토 \ Cms \ Api \ Data \ PageInterface'
);
}
$ searchResults-> setItems ($ 페이지);
내가 맞으면이 코드는 배열을 채우는 배열을 만듭니다 $pages. 따라서이 코드는 왜 $cmsPage배열 인지 설명 할 수 있습니다 !
그러나...
의 @return진술을 읽으면 \Magento\Cms\Api\PageRepositoryInterface::getList을 볼 수 있습니다 @return \Magento\Cms\Api\Data\PageSearchResultsInterface.
그리고에서의 @return문장을 읽음으로써 \Magento\Cms\Api\Data\PageSearchResultsInterface::getItems우리는 볼 수 있습니다 \Magento\Cms\Api\Data\PageInterface[]!
그렇게 $cmsPage내에서 foreach루프의 구현해야 \Magento\Cms\Api\Data\PageInterface다음에 제대로 전달 될 수있다 \Magento\Cms\Api\PageRepositoryInterface::delete.
누가 틀렸어?
- @api 주석과 코드를 제대로 읽고 이해할 수없는 저
- @api 클래스에 올바른 주석을 제공하지 않거나 인터페이스를 구현하지 않는 마 젠토.
이 분석은 CMS 페이지 API에 대한 것이지만 CMS 블록 API 에도 적용됩니다 .