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::cleanCmsPages
tü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 $cmsPage
kullanılan benim terk ve foreach ($cmsPageCollection as $cmsPage)
gerçekten $cmsPage
bir dizi gibi görünüyor .
Ben kodu kazdık:
\Magento\Cms\Api\PageRepositoryInterface::getList
tarafı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 $cmsPage
bir dizi olduğunu açıklayabilir !
FAKAT...
Okuyarak @return
tablosu \Magento\Cms\Api\PageRepositoryInterface::getList
görebiliriz @return \Magento\Cms\Api\Data\PageSearchResultsInterface
.
Ve sonra @return
ifadesini okuyarak \Magento\Cms\Api\Data\PageSearchResultsInterface::getItems
görebiliriz \Magento\Cms\Api\Data\PageInterface[]
!
Böylece $cmsPage
benim foreach
döngü içinde \Magento\Cms\Api\Data\PageInterface
daha 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 .