আমি আজ আবার এই সমস্যায় পড়ে গিয়েছি এবং এটি জেনে রাখা গুরুত্বপূর্ণ যে যখনই শৃঙ্খলে নিচে নির্ভরশীলতা এমন একটি দৃষ্টান্ত প্রবর্তন করে যা অ্যাপ্লিকেশনটির অবস্থা জানতে হবে তখনই এই সমস্যাটি ছুঁড়ে দেওয়া উচিত।
অনেক ক্ষেত্রে এই ত্রুটিটি সেশন-সীমাবদ্ধ (যেহেতু সেশনের অ্যাপ্লিকেশনটির অবস্থান জানতে হবে (সম্মুখভাগ বা প্রশাসনিক))।
আমার ক্ষেত্রে আমার Magento\Tax\Api\TaxCalculationInterface
সিএলআই কমান্ড থাকা দরকার ছিল, তবে এটির নির্ভরতা শৃঙ্খলার এক পর্যায়ে গ্রাহক সেশনের (সম্ভবত গ্রাহক গ্রুপ পেতে) প্রয়োজন।
সম্পাদনা করুন: আমি প্রক্সি ব্যবহার করে আরও ভাল সমাধান পেয়েছি। তবে ইতিহাসের জন্য, আমার আগের উত্তরটি এখানে:
এটির সমাধানের জন্য আমি আমার নির্মাণকারীর মধ্যে এই ইন্টারফেসটি অন্তর্ভুক্ত করি নি, বরং এটি কারখানা:
/**
* @var \Magento\Tax\Api\TaxCalculationInterfaceFactory
*/
protected $taxCalculationFactory;
/**
* @param \Magento\Tax\Api\TaxCalculationInterfaceFactory $taxCalculationFactory
*/
public function __construct(
\Magento\Tax\Api\TaxCalculationInterfaceFactory $taxCalculationFactory
) {
$this->taxCalculationFactory = $taxCalculationFactory;
}
এই পদ্ধতিতে, ক্লাসটি কেবলমাত্র সেই পদ্ধতিতে ইনস্ট্যান্ট করা হয়েছে যেখানে আমার এটির প্রয়োজন ছিল এবং এখন আর নির্মাতায় নেই:
$taxCalculation = $this->taxCalculationFactory->create();
এটি এই বিশেষ ক্ষেত্রে আমার সমস্যার সমাধান করেছে।
এবং এখন একটি প্রক্সি ব্যবহার করে উত্তর:
যদি আপনি সমস্ত নির্ভরশীলতাগুলি শৃঙ্খলে থেকে ট্রিগার করতে না চান তবে আপনার কনস্ট্রাক্টরে একটি প্রক্সি ব্যবহার করা উচিত। মূল ডকুমেন্টেশন অনুসারে :
... কনস্ট্রাক্টর ইনজেকশন এর অর্থ হ'ল আপনি যখন কোনও বস্তু তৈরি করেন তখন অবজেক্ট ইনস্ট্যান্টেশনের একটি চেইন প্রতিক্রিয়া প্রায়শই ফলাফল হয়।
এবং:
... প্রক্সিগুলি অন্যান্য ক্লাসগুলি তাদের অলস-বোঝা সংস্করণে প্রসারিত করে। অর্থাৎ শ্রেণীর একটি প্রকৃত উদাহরণ ক্লাসের কোনও একটি পদ্ধতি আসলে বলা হওয়ার পরে তৈরি হওয়া প্রক্সি তৈরি হয়।
সুতরাং আমার পরিস্থিতিতে, এর সাথে TaxCalculationInterface
, আমাকে যা করতে হয়েছিল তা হ'ল আমার নির্মাতার প্রক্সি হিসাবে আমার করের গণনাটি তাত্ক্ষণিকভাবে করা:
/**
* @var \Magento\Tax\Api\TaxCalculationInterface\Proxy
*/
protected $taxCalculation;
/**
* @param \Magento\Tax\Api\TaxCalculationInterface\Proxy $taxCalculation
*/
public function __construct(
\Magento\Tax\Api\TaxCalculationInterface\Proxy $taxCalculation
) {
$this->taxCalculation = $taxCalculation;
}
এইভাবে, আমার ক্লাসটি অলস বোঝা। তা হ'ল: আমি এর কোনও একটি পদ্ধতিকে কল করার সাথে সাথে এটি কেবল তাত্ক্ষণিকভাবে চালিত। উদাহরণ স্বরূপ:
$rate = $this->taxCalculation->getCalculatedRate($productRateId);