আমার সমস্ত সিএমএস পৃষ্ঠা মুছতে হবে।
কোডটি এখানে:
নেমস্পেস শীঘ্রই ore কোর \ সেটআপ;
Magento \ Cms; Api \ PageRepositoryInterface ব্যবহার করুন;
ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ এপি \ অনুসন্ধান ক্রিটরিয়া ইন্টারফেস ব্যবহার করুন;
বর্গ সেন্টিমিটার
{
/ **
* @vvvar অনুসন্ধান ক্রিটরিয়া ইন্টারফেস
* /
ব্যক্তিগত $ অনুসন্ধান ক্রিটরিয়া;
/ **
* @var পেজরেপোসিটোরি ইন্টারফেস
* /
বেসরকারী $ সেমিপেইজরেপসিটরি;
/ **
* সেমি নির্মাণকারী।
* @ পরিমাপ অনুসন্ধান ক্রিটেরিয়া ইন্টারফেস - অনুসন্ধান ক্রিটরিয়া
* @ পেপার পেজরেপোসিটোরি ইন্টারফেস $ সেমিপেজেরপোজিটরি
* /
পাবলিক ফাংশন __ কনস্ট্রাক্ট (
অনুসন্ধান ক্রিটেরিয়া ইন্টারফেস $ অনুসন্ধান ক্রিটরিয়া,
পেজরেপোসিটোরি ইন্টারফেস $ সেমিপেজেরোপোসিটোরি
)
{
$ এটি-> অনুসন্ধান ক্রিটরিয়া = $ অনুসন্ধান ক্রিটরিয়া;
$ এটি-> cmsPageRepository = $ cmsPageRepository;
}
/ **
* বিদ্যমান সমস্ত সিএমএস পৃষ্ঠা মুছুন
* /
পাবলিক ফাংশন ক্লিনক্যাম্পেজ ()
{
$ সেমিপেজ সংগ্রহশালা = $ এটি-> সেমিপেজরেপোসিটোরি
-> getList ($ this-> searchCriteria)
-> getItems ();
ফোরচ ($ সেমিপেজ সংগ্রহ হিসাবে $ সেমিপেজ) {
$ 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, আমরা এই বিট কোডটি দেখতে পারি:
$ পৃষ্ঠাগুলি [] = $ এটি-> ডেটাঅবজেক্টপ্রসেসর-> বিল্ডআউটপুট ডেটাআর্রে (
$ PageData,
'Magento \ সেমি \ Api, \ ডেটা \ 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 এর জন্য তবে এটি সিএমএস ব্লক এপিআইতে প্রযোজ্য ।