ฉันต้องการลบหน้า 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