ম্যাজেন্টো 2: সাহায্যকারীদের সঠিক ব্যবহার


9

টেমপ্লেট ফাইলগুলিতে নিম্নলিখিতগুলি ব্যবহার করতে সক্ষম হবার জন্য আমি আরও বেশি সংখ্যক লোককে সহায়তা ক্লাসগুলি ঘোষণা করতে শুরু করছি:

$this->helper('Path/To/Helper/Class')->customMethod();

এই ধরণের কোডটি লোককে এড়াতে দেয় যাতে অবজেক্ট ম্যানেজারটি সরাসরি বিধিনিষেধ ব্যবহার না করে তবে আমি সেই কোডগুলি দেখতে চাই যা সেই সহায়কগুলিতে ব্লক কোড হওয়া উচিত।

সুতরাং এখানে আমার প্রশ্নগুলি:

  • সহায়ক ক্লাসে একজনকে কী লিখতে হবে?
  • কোন ক্ষেত্রে টেমপ্লেটগুলিতে সহায়তা পদ্ধতি ব্যবহারের জন্য এটি প্রাসঙ্গিক?

উত্তর:


20

না।
এটি ObjectManager::getInstance()->create()কোনও টেম্পলেট ব্যবহার করার মতো !
পরিবর্তে কনস্ট্রাক্টর নির্ভরতা হিসাবে সহায়কটিকে গ্রহণ করে এমন একটি কাস্টম ব্লক ব্যবহার করুন এবং একটি প্রক্সি পদ্ধতি যুক্ত করুন যা সহায়ক পদ্ধতিটিকে কল করে।

টেমপ্লেটে:

$block->customMethod()

ব্লকে:

public function __construct(Path/To/Helper/Class $helperClass, ...other dependencies...)
{
    $this->helper = $helperClass;
    // ...other assignments and call to parent::__construct()
}

public function customMethod()
{
    return $this->helper->customMethod();
}

ওওপি নীতিতে কথা বলুন এটি "ডেমিটারের আইন" লঙ্ঘন করা এড়িয়ে চলে। এটি টেমপ্লেটের পরিবর্তে ব্লকটিতে ব্যবসায়ের যুক্তি সজ্জিত করে। পার্শ্ব প্রতিক্রিয়া হিসাবে এটি যুক্তিটিকে আরও পরীক্ষামূলক করে তোলে কারণ যুক্তিটি ব্লকে স্থানান্তরিত হয়।

সহায়তাকারী ক্লাসগুলিতে কি যুক্তিটি যুক্ত হয়েছিল তা সম্পর্কে, আমি দেখতে পেলাম যে ম্যাজেন্টো 2-এ সহায়তাকারীরা বেশিরভাগ পরিষেবাগুলির জন্য অর্থবোধ করে যা এমন কোনও মডেল নয় যা পুনরায় ব্যবহারযোগ্য কোড ধারণ করে, উদাহরণস্বরূপ দাম বিন্যাসকরণ (যা কোরটিতে রয়েছে তবে আমি করতে পারি) এখনই এর চেয়ে ভাল উদাহরণের কথা ভাবেন না)।


আমি নীতির সাথে একমত, তবে দেখে মনে হচ্ছে যে di.xmlব্লক শ্রেণীর ধরণের জন্য পছন্দ ব্যবহার করে কিছু বিন্যাসের কনফিগারেশন রাখবেন না। আমি উদাহরণস্বরূপ ক্লাসের জন্য এটি করার চেষ্টা করেছি \Magento\Catalog\Block\Product\View\Type\Simple, আমাদের টেম্পলেটটিতে default.phtmlযে টেম্পলেটটি ব্যবহৃত হয়েছিল তা উপেক্ষা করা হবে। এই মুহুর্তে কেন কোনও ক্লু নেই
সিলভাইন রায়

2
আরও আপ-টু-ডেট তথ্যের জন্য এখানে ঝাঁপ দেওয়া। ২.২ হিসাবে, ব্লক ক্লাসগুলি বাড়ানোর প্রস্তাব দেওয়া হয় না। পরিবর্তে, যদি কাস্টম উপস্থাপনা যুক্তি প্রয়োজন হয়, একটি ভিউমোডেল সংজ্ঞায়িত করা উচিত এবং লেআউট.এক্সএমএল-এ ব্লকের যুক্তি হিসাবে ঘোষণা করা উচিত। যেহেতু ভিউমোডেলগুলি অবজেক্ট ম্যানেজারের মাধ্যমে নির্মিত, তাই আপনি ভবিষ্যতে ম্যাজেন্টো ২-এর রিলিজগুলিতে বিসি ভাঙার পরিবর্তনের নিজেকে প্রকাশ না করে নিজের নির্ভরতা গ্রাফটি তারে আপ করতে পারেন
John

1

আমি আপনার মডিউলের অভ্যন্তরে বৈশ্বিক ক্রিয়াকলাপ হিসাবে সহায়তাকারীদের ('গ্লোবাল' শব্দের জন্য দুঃখিত) এবং ম্যানেজার / পরিষেবা চুক্তিগুলি বিশ্বব্যাপী ফাংশন হিসাবে দেখি যা আপনার মডিউলটির বাইরেও ব্যবহার করার অনুমতি দেয়।

আপনি যদি এই নীতিটি অনুসরণ করেন, তবে আপনি সাহায্যকারীদের জন্য ন্যূনতম ব্যবহারের বিষয়টি দেখতে পাবেন, আমি কেবল তাদের আমার মডিউলগুলিতে কনফিগারেশন র‌্যাপার হিসাবে ব্যবহার করি।

$this->configHelper->get(Config::PATH_TO_XML_PATH);
$this->configHelper->isEnabled();

এই জাতীয় জিনিস। আপনার যদি অন্য কোনও কার্যকারিতা থাকে যা আপনার মডিউলের বাইরে ব্যবহারিক হতে পারে তবে পরিবর্তে একটি পরিচালক তৈরি করুন।

একটি আদর্শ বিশ্বে, তৃতীয় পক্ষের বিকাশকারীদের, যাদের অন্যান্য মডিউলগুলির কার্যকারিতা প্রয়োজন তাদের কেবলমাত্র সংগ্রহস্থল এবং পরিচালকের জন্য উপলব্ধ ইন্টারফেসগুলি দেখতে হবে এবং Apiফোল্ডারে স্টাফ রাখতে হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.