Tüm CMS sayfalarını silmem gerekiyor.
İşte kod:
ad alanı Yakında \ Core \ Setup;
Magento \ Cms \ Api \ PageRepositoryInterface kullanın;
Magento \ Framework \ Api \ SearchCriteriaInterface kullanın;
Cms sınıfı
{
/ **
* @var SearchCriteriaInterface
* /
private $ searchCriteria;
/ **
* @var PageRepositoryInterface
* /
private $ cmsPageRepository;
/ **
* Cms yapıcı.
* @param SearchCriteriaInterface $ searchCriteria
* @param PageRepositoryInterface $ cmsPageRepository
* /
kamu işlevi __construct (
SearchCriteriaInterface $ searchCriteria,
PageRepositoryInterface $ cmsPageRepository
)
{
$ this-> searchCriteria = $ searchCriteria;
$ this-> cmsPageRepository = $ cmsPageRepository;
}
/ **
* Mevcut tüm CMS sayfalarını silin
* /
genel işlev cleanCmsPages ()
{
$ cmsPageCollection = $ this-> cmsPageRepository
-> GetList ($ this-> searchCriteria)
-> getItems ();
foreach ($ cmsPageCollection $ $ cmsPage olarak) {
$ This-> cmsPageRepository-> silmek ($ cmsPage);
}
}
}
Bu nedenle, arama \Soon\Core\Setup\Cms::cleanCmsPagestüm CMS sayfalarını silmelidir.
Ancak bunu yaparken şu hatayı alıyorum:
Argument 1 passed to Magento\Cms\Model\PageRepository::delete() must implement interface Magento\Cms\Api\Data\PageInterface, array given
Bu yüzden $cmsPagekullanılan benim terk ve foreach ($cmsPageCollection as $cmsPage)gerçekten $cmsPagebir dizi gibi görünüyor .
Ben kodu kazdık:
\Magento\Cms\Api\PageRepositoryInterface::getListtarafından uygulanmaktadır \Magento\Cms\Model\PageRepository::getList.
Sonra \Magento\Cms\Model\PageRepository::getList, bu kod parçasını görebiliriz:
$ pages [] = $ this-> dataObjectProcessor-> buildOutputDataArray (
$ PageData,
'Magento \ Cms \ Api \ Data \ PageInterface'
);
}
$ SearchResults-> setItems ($ sayfaları);
Doğruysam, bu kod diziyi dolduran bir dizi oluşturur $pages. Yani bu kod neden $cmsPagebir dizi olduğunu açıklayabilir !
FAKAT...
Okuyarak @returntablosu \Magento\Cms\Api\PageRepositoryInterface::getListgörebiliriz @return \Magento\Cms\Api\Data\PageSearchResultsInterface.
Ve sonra @returnifadesini okuyarak \Magento\Cms\Api\Data\PageSearchResultsInterface::getItemsgörebiliriz \Magento\Cms\Api\Data\PageInterface[]!
Böylece $cmsPagebenim foreachdöngü içinde \Magento\Cms\Api\Data\PageInterfacedaha sonra düzgün bir şekilde geçirilebilir bir uygulama olmalıdır \Magento\Cms\Api\PageRepositoryInterface::delete.
Kim yanlış?
- @Api yorumları ve kodunu düzgün okuyamayan / anlayamayan ben
- @Api sınıflarında doğru yorumu vermeyen ya da arayüzü gerektiği gibi uygulamayan Magento.
Bu analiz CMS Sayfa API'sı içindir, ancak CMS Blok API'sı için de geçerlidir .