すべてのCMSページを削除する必要があります。
これがコードです:
名前空間Soon \ 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、
PageRepositoryInterface $ cmsPageRepository
)
{
$ this-> searchCriteria = $ searchCriteria;
$ this-> cmsPageRepository = $ cmsPageRepository;
}
/ **
*既存のCMSページをすべて削除します
* /
パブリック関数cleanCmsPages()
{
$ cmsPageCollection = $ this-> cmsPageRepository
-> getList($ this-> searchCriteria)
-> getItems();
foreach($ cmsPageCollection as $ cmsPage){
$ this-> cmsPageRepository-> delete($ 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、
'Magento \ Cms \ Api \ Data \ PageInterface'
);
}
$ searchResults-> setItems($ pages);
私が正しければ、このコードは配列を作成する配列を作成します$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コメントとコードを正しく読んだり理解したりできない私
- @agentクラスに適切なコメントを与えないか、またはインターフェイスを必要に応じて実装しないMagento。
この分析はCMSページAPIに関するものですが、CMS ブロック APIにも適用されます。