मुझे सभी सीएमएस पृष्ठों को हटाने की आवश्यकता है।
यहाँ कोड है:
नाम स्थान जल्द ही \ Core \ Setup;
Magento \ Cms \ Api \ PageRepositoryInterface का उपयोग करें;
Magento \ Framework \ Api \ SearchCriteriaInterface का उपयोग करें;
वर्ग सीएमएस
{
/ **
* @वर सर्चक्रिटियाइंटरफेस
* /
निजी $ सर्चक्रिटेरिया;
/ **
* @वर पेजरिपोसिटरीइंटरफेस
* /
निजी $ cmsPageRepository;
/ **
* सेमी कंस्ट्रक्टर।
* @ अपरम सर्चक्रिटियाइंटरफेस $ सर्चक्रिटेरिया
* @ पेजम पेजरोसिटरीइंटरफेस $ cmsPageRepository
* /
सार्वजनिक समारोह __construct (
सर्चक्रिटेरियाइंटरफेस $ सर्चक्रिटेरिया,
PageRepositoryInterface $ cmsPageRepository
)
{
$ यह-> सर्चक्रिटिया = $ सर्चक्रिटेरिया;
$ यह-> cmsPageRepository = $ cmsPageRepository;
}
/ **
* सभी मौजूदा सीएमएस पृष्ठ हटाएं
* /
सार्वजनिक समारोह cleanCmsPages ()
{
$ cmsPageCollection = $ यह-> cmsPageRepository
-> getList ($ this-> searchCriteria)
-> getItems ();
foreach ($ cmsPageCollection $ cmsPage के रूप में) {
$ This-> cmsPageRepository-> हटाने ($ cmsPage);
}
}
}
इसलिए, कॉलिंग \Soon\Core\Setup\Cms::cleanCmsPagesको सभी सीएमएस पृष्ठों को हटाना चाहिए।
लेकिन ऐसा करते समय, मुझे यह त्रुटि मिलती है:
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, हम इस बिट कोड को देख सकते हैं:
$ पृष्ठ [] = $ इस-> dataObjectProcessor-> buildOutputDataArray (
$ PageData,
'Magento \ सी एम \ एपीआई \ 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 टिप्पणियों और कोड को ठीक से नहीं पढ़ / समझ सकते हैं
- मैगेंटो जो अपनी @api कक्षाओं में सही टिप्पणी नहीं देते हैं ... या इंटरफ़ेस को लागू नहीं करता है जैसा कि इसे करना चाहिए।
यह विश्लेषण सीएमएस पेज एपीआई के लिए है, लेकिन सीएमएस ब्लॉक एपीआई पर भी लागू होता है ।