すべての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にも適用されます。