ฉันต้องการลบหน้า CMS ทั้งหมด
นี่คือรหัส:
เนมสเปซเร็ว ๆ นี้ \ Core \ Setup; ใช้ Magento \ Cms \ Api \ PageRepositoryInterface ใช้ Magento \ Framework \ Api \ SearchCriteriaInterface ระดับซม { / ** * @var SearchCriteriaInterface * / เกณฑ์ $ ส่วนตัว / ** * @var PageRepositoryInterface * / $ cmsPageRepository ส่วนตัว / ** * ตัวสร้างซม. * @param SearchCriteriaInterface $ searchCriteria * @param PageRepositoryInterface $ cmsPageRepository * / ฟังก์ชั่นสาธารณะ __ โครงสร้าง ( SearchCriteriaInterface $ searchCriteria PageRepositoryInterface $ 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, 'วีโอไอพี \ ซม \ 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 ได้อย่างถูกต้อง
- Magento ผู้ที่ไม่ได้ให้ความเห็นที่ถูกต้องในคลาส @api ของพวกเขา ... หรือไม่ได้ใช้อินเทอร์เฟซตามที่ควร
การวิเคราะห์นี้มีไว้สำหรับ CMS Page API แต่ยังใช้กับ CMS Block API