ম্যাজেন্টো 2: মডিউল বিকাশকারীদের কীভাবে তাদের নিজস্ব কনফিগারেশন ফাইলগুলি পড়তে হবে


20

পরিস্থিতি: আমি একজন ম্যাজেন্টো 2 মডিউল বিকাশকারী। আমি একটি কনফিগারেশন ফাইল তৈরি করতে চাই app/etc। আমি চাই যে এই ফাইলটি অঞ্চল অনুযায়ী "স্কোপ" করা হোক

app/etc/my_file.xml
app/etc/frontend/my_file.xml
app/etc/adminhtml/my_file.xml

ম্যাজেন্টো 1 এ আমি কেবল একটি তৈরি করব config.xmlএবং আমার পথে যাব। এক্সপিএল ফাইলটিতেই অঞ্চলটির স্কোপিং ঘটেছিল। তবে ম্যাজেন্টো 2 এটির থেকে আলাদাভাবে যোগাযোগ করে

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

একদিকে, মনে হচ্ছে "সঠিক" কাজটি করা একটি ফাইল সিস্টেম রিডার অবজেক্ট তৈরি করা। উদাহরণস্বরূপ, ম্যাজেন্টো import.xmlনিম্নলিখিত ফাইলগুলি লোড করছে বলে মনে হচ্ছে

#File: vendor/magento/module-import-export/Model/Import/Config/Reader.php
namespace Magento\ImportExport\Model\Import\Config;

class Reader extends \Magento\Framework\Config\Reader\Filesystem
{

    public function __construct(
        //...
        $fileName = 'import.xml',
        //...
    ) {
        parent::__construct(
            $fileResolver,
            $converter,
            $schemaLocator,
            $validationState,
            $fileName,
            $idAttributes,
            $domDocumentClass,
            $defaultScope
        );
    }
    //...
}        

বেস Magento\Framework\Config\Reader\Filesystemশ্রেণীর মতো দেখে মনে হচ্ছে এটির ক্ষেত্রটি সমাধান করার কোড রয়েছে code

তবে কিছু ম্যাজেন্টো কনফিগারেশন ফাইলকে এই প্যাটার্নটি রক্ষা করা বলে মনে হচ্ছে। এই ফাইলগুলির জন্য পাঠক থাকাকালীন ( event.xmlএই উদাহরণে)

vendor/magento/framework/Event/Config/Reader.php

এই পাঠকদের ব্যবহার করে এমন "স্কোপড ডেটা" ক্লাস রয়েছে ।

#File: vendor/magento/framework/Event/Config/Data.php
class Data extends \Magento\Framework\Config\Data\Scoped
{
    public function __construct(
        \Magento\Framework\Event\Config\Reader $reader,
        //...
    ) {
        parent::__construct($reader, $configScope, $cache, $cacheId);
    }
}

এটি এটিকে দেখে মনে হচ্ছে স্কোপড রিডার ক্লাসগুলি মডিউল বিকাশকারীকে তৈরি করা উচিত। তবে সমস্ত কনফিগারেশন ফাইলের এই স্কোপযুক্ত পাঠক নেই।

ম্যাগান্টো 2 মডিউল বিকাশকারীদের অনুসরণ করার জন্য কি স্পষ্ট পথ রয়েছে? বা এটি কি ম্যাগেন্টো 2 মডিউল বিকাশকারীদের নিজস্ব উপায়ে আসা উচিত, এবং ফলস্বরূপ বিশৃঙ্খলা / অ-মানক-কনফিগারেশন-লোডিং কেবল ব্যবসা করার ব্যয়?

সরকারী ডকুমেন্টেশন প্রাপ্তিসাধ্য ক্লাস কিছু আচ্ছাদন একটি ভাল পেশা আছে, কিন্তু কিছুই আসলে reconciles কোন স্পষ্ট দিক নির্দেশনা যার উপর জমাটবদ্ধ বাস্তবায়ন আমরা ব্যবহার অনুমান করছি আছে, অথবা যদি প্রত্যাশা প্রত্যেক মডিউল কিভাবে এই করবেন করার সিদ্ধান্ত নেয় তার নিজের।


আমি মনে করি এটি সাহায্য করতে পারে: magento.stackexchange.com/q/51915/146
মারিয়াস

আপনি কি এই পিআরটি @ ভিনাই গিথুব / মাইজেন্টো / মিমেন্টো 2/ pull/ 1410 দ্বারা দেখেছেন ? আমি মনে করি আপনার যদি বিশেষ প্রয়োজনীয়তা না থাকে তবে আপনি কেবল নিজের ভার্চুয়াল ধরণের সাথে নিজের কনফিগারেশন ফাইলটি রোল করতে পারেন।
ক্রিস্টফ ফুমন

উত্তর:


4

নতুন কনফিগারেশন প্রকার তৈরি করতে, মডিউল বিকাশকারীকে একটি কনফিগারেশন ধরণের শ্রেণি তৈরি করা উচিত যা কনফিগারেশনের ক্লায়েন্টদের দ্বারা ব্যবহৃত হবে।

এই ধরণের ক্লাসগুলি যথাসম্ভব সহজ করার জন্য, কনফিগারেশন ফাইলগুলি পড়ার এবং ক্যাশে ডেটা পড়ার সমস্ত আচরণ \Magento\Framework\Config\DataInterfaceদুটি পুনরায় ব্যবহারযোগ্য প্রয়োগের মাধ্যমে সরিয়ে নেওয়া হয়েছিল:

  • \Magento\Framework\Config\Data - কনফিগারেশনের ধরণের জন্য যা কেবলমাত্র একটি স্কোপে লোড হতে পারে তা বোঝায় (কেবলমাত্র বিশ্বব্যাপী eav_attributes.xML)
  • \Magento\Framework\Config\Data\Scoped - কনফিগারেশনের ধরণের জন্য যা বিভিন্ন স্কোপে লোড করা যায় (ইভেন্ট.এক্সএমএল - গ্লোবাল এবং প্রতি-অঞ্চল)

প্রতিটি কনফিগারেশন ধরণের প্রাক কনফিগার করা Config\DataInterfaceঅবজেক্ট থাকার কথা। ভার্চুয়াল টাইপ বা উত্তরাধিকারের সাথে কনফিগারেশন করা যেতে পারে।

যদিও মডিউল বিকাশকারী প্রযুক্তিগতভাবে তাদের কনফিগারেশন ধরণের Config\DataInterfaceপ্রয়োগ থেকে উত্তরাধিকারী হতে পারে তবে মূল ক্লাস থেকে প্রসারিত না করার পরামর্শ দেওয়া হচ্ছে। কম্পোজিশন ব্যবহার করা সর্বদা ভাল।

এখন \Magento\Framework\Config\Dataএবং Data\Scopedশুধুমাত্র ক্যাশে এবং প্রতিনিধি কনফিগারেশন পড়া না \Magento\Framework\Config\ReaderInterfaceReaderInterfaceঅনুরোধ করা স্কোপের জন্য পিএইচপি অ্যারের ফর্ম্যাটে বৈধ কনফিগারেশন সরবরাহ করার কথা (যদি কনফিগারেশনটি বাদ পড়ে)। একাধিক বাস্তবায়নের ReaderInterfaceকিন্তু Magento শুধুমাত্র জাহাজ এক জেনেরিক পাঠক (ডিবি থেকে উদাহরণ পঠিত কনফিগারেশনের জন্য) সম্ভব আছেন: \Magento\Framework\Config\Reader\Filesystem

\Magento\Framework\Config\Reader\Filesystem মডিউলার ফাইল সিস্টেম থেকে ফাইলগুলি পড়ার জন্য প্রয়োজনীয় সমস্ত অপারেশনগুলি করে: ফাইলগুলি পড়ুন, মার্জ করুন এবং বৈধ করুন।

প্রত্যেকের Config\DataInterfaceপৃথকভাবে কনফিগার করা উদাহরণ রয়েছে বলে মনে করা হচ্ছে Config\ReaderInterface। সিস্টেমের কোনও উদাহরণ হিসাবে, নির্দিষ্ট পাঠক ভার্চুয়াল টাইপ বা উত্তরাধিকারের সাথে কনফিগার করা যায়। ম্যাজেন্টো ডকুমেন্টেশন সমস্ত Filesystemনির্ভরতা বর্ণনা করে ।

এই চেইনের প্রতিটি উপাদান alচ্ছিক (নিজেই কনফিগার টাইপ শ্রেণি বাদে) এবং আরও নির্দিষ্ট প্রয়োগের সাথে প্রতিস্থাপিত হতে পারে।


1

দেখে মনে হচ্ছে অফিসিয়াল ডকুমেন্টেশনে আপনার প্রশ্নের উত্তর রয়েছে।


1
সাড়া দেওয়ার জন্য আপনাকে ধন্যবাদ, তবে আমি নিশ্চিত নই যে ডকুমেন্টেশন আমার প্রশ্নের জবাব দেয়। এটি এমন বেশ কয়েকটি ইন্টারফেস (যা দরকারী, এটির জন্য +1) তালিকাভুক্ত করে যা উপলভ্য, তবে এই ইন্টারফেসগুলির ( Magento\Framework\Config\Dataএবং Magento\Framework\App\Config) কংক্রিট বাস্তবায়নগুলির কোনওটিই @api এর সাথে চিহ্নিত নয় reconc যদি কেবলমাত্র সেই ডকুমেন্টেশনটি ছেড়ে যায় তবে আমি এই ধারণার অধীনে থাকব যে মডিউল বিকাশকারী হিসাবে কনফিগারেশন ফাইলগুলি তৈরি এবং পড়ার জন্য কোনও মানক ব্যবস্থা নেই এবং আমি যা চাই তা করতে পারি। এটা ঠিক মনে হচ্ছে না।
অ্যালান ঝড়

আপনি যখন অন্য কিছু মডিউলের কনফিগারেশন পড়তে চান তখন কি আপনি কেসগুলি বর্ণনা করতে পারেন? আমার জন্য কনফিগারেশন রিডার মডিউলটির ব্যক্তিগত এপিআই।
কান্দি

কোনও বিকাশকারী যদি ম্যাজেন্টো কোরটিতে অবদান রাখতে চান। যদি কোনও বিকাশকারী একাধিক মডিউলগুলিতে কাজ করে তবে সেগুলি সবগুলিই নিয়ন্ত্রণ করে এবং একটি কনফিগারেশন ফাইল থেকে কোনও মান পড়তে কোনও ইউএমএল চার্টটি সমান্তরাল করতে চায় না। আরও দেখুন - একটি কনফিগারেশন সিস্টেম সহ বেশিরভাগ পিএইচপি ফ্রেমওয়ার্ক। তথাপি, যদি Magento 2 কোর টিমের উদ্দেশ্য যে মডিউল কনফিগারেশন হয় হয় একটি বেসরকারি এবং মডিউল প্রতি কাস্টম, কোথাও বিবৃত করা উচিত।
অ্যালান ঝড় 21

এছাড়াও - (সামান্য পৃথক / স্পর্শকাতর) ম্যাজেন্টোর ব্যাকএন্ডে সিস্টেম কনফিগারেশন বিভাগ - বিদ্যমান বিভাগের কনফিগারেশনের উপর ভিত্তি করে একটি বৈশিষ্ট্য তৈরি করা।
অ্যালান ঝড় 21

2
যে কোনও এপিআই যা @api এর সাথে টিকা দেওয়া হয়নি তা ব্যক্তিগতভাবে এই অর্থ যে আপনি যদি এটি ব্যবহার করেন তবে আপনি পশ্চাদপদ সামঞ্জস্যের জন্য দায়বদ্ধ / এপিআই সমস্যার পরিবর্তন করে। Ap ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ কনফিগারেশন \ রিডার ইন্টারফেসের ap @ এপি টীকা আছে।
কান্দি

0

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

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