ম্যাজেন্টো 2: ভেরি / জেনারেশনে ইন্টারসেপ্টর ফাইলগুলি কী কী?


24

সুতরাং আমি কিছু Interceptor.phpফাইল লক্ষ্য করেছিvar/generation

আমি জানি যে এই ফোল্ডারে নিম্নলিখিতগুলির জন্য ফ্লাইতে তৈরি হওয়া উত্পন্ন ক্লাস রয়েছে:

  • কারখানা
  • প্রক্সি
  • প্লাগইন

আমি ধরে নিয়েছি যে ইন্টারসেপ্টর ফাইলগুলি প্লাগইনগুলির সাথে সংযুক্ত রয়েছে তবে কখনও কখনও আমি কীভাবে এই ফাইলগুলি উত্পন্ন হয় তা পাই না। উদাহরণস্বরূপ আমি পেয়েছি var/generation/Magento/Framework/App/Response/Http/Interceptor.phpতবে এই ফাইলটি কোনও বিদ্যমান শ্রেণীর সাথে মেলে না বলে মনে হচ্ছে।

সুতরাং আমি কীভাবে ইন্টারসেপ্টর.এফপি ফাইলগুলি উত্পন্ন হয় তার একটি ভালভাবে বর্ণিত ওয়ার্কফ্লো খুঁজছি?

উত্তর:


32

ইন্টারসেপ্টর ক্লাসগুলি ইন্টারসেপ্টর ডিজাইন প্যাটার্নের একটি বাস্তবায়ন । ইন্টারসেপ্টরগুলি হ'ল কীভাবে ম্যাজেন্টো 2 এর অবজেক্ট সিস্টেম একটি প্লাগইন সিস্টেম প্রয়োগ করে

ক্লায়েন্ট বিকাশকারী হিসাবে, থিয়োরিটি হ'ল আপনাকে ইন্টারসেপ্টরগুলি নিয়ে চিন্তা করার দরকার নেই - আপনি বস্তুর পরিচালককে এক্স টাইপের কোনও বস্তুর জন্য জিজ্ঞাসা করেন এবং এটি আপনাকে ফিরিয়ে দেয়। আপনি যে বস্তুর জন্য জিজ্ঞাসা করেছেন সেটি কোনও ইন্টারসেপ্টার হতে পারে বা নাও হতে পারে, তবে ক্লায়েন্ট প্রোগ্রামার দৃষ্টিকোণ থেকে এটি অ-ইন্টারসেপ্টর সংস্করণের মতোই আচরণ করে। কীভাবে অবজেক্ট ম্যানেজার বাস্তবায়ন বিশদে কোনও ইন্টারসেপ্টারকে ফেরত বা না ফেরার সিদ্ধান্ত নেয়।

সেই প্রয়োগের বিশদটিতে আগ্রহী ব্যক্তিদের জন্য - যদি কোনও শ্রেণি বা that শ্রেণীর পিতামাতা শ্রেণীর একটি প্লাগইন কনফিগার করা থাকে তবে অবজেক্ট ম্যানেজার একটি ইন্টারসেপ্টারকে ফিরিয়ে দেয়। আপনি এটি বিকাশকারী মোড ইন্টারসেপ্টর শ্রেণিতে দেখতে পারেন

#File: vendor/magento/framework/Interception/ObjectManager/Config/Developer.php
public function getInstanceType($instanceName)
{
    $type = parent::getInstanceType($instanceName);
    if ($this->interceptionConfig && $this->interceptionConfig->hasPlugins($instanceName)
        && $this->interceptableValidator->validate($instanceName)
    ) {
        return $type . '\\Interceptor';
    }
    return $type;
}

উত্পাদনের জন্য (যেমন সংকলিত মোড), ম্যাগেন্টো সংকলন মোডের সময় সিস্টেমটি প্রাক স্ক্যান করে এবং কোন ক্লাসে প্লাগইন প্রয়োজন তার একটি নোট তৈরি করে।

আসল প্রজন্মের ক্ষেত্রে, ম্যাজেন্টো একটি পিএইচপি অটোলোডার দিয়ে এটি পরিচালনা করে। যদি কোনও বিকাশকারী কোনও ক্লাস ইনস্ট্যান্ট করে (বা অন্যথায় কোনও শ্রেণীর নামের সাথে একটি পিএইচপি অটোল্যাড ইভেন্টটি class_existsচালিত করে (কোনও প্রকার ইঙ্গিত, শ্রেণি, ইত্যাদি), এবং সুরকার ভিত্তিক অটোলোডার ক্লাস ফাইলটি খুঁজে না পায়, তবে দ্বিতীয় নিবন্ধিত অটোলোডার

Magento\Framework\Code\Generator\Autoloader::load

আলোড়ন সৃষ্টি হয়. এই অটোলোডার

vendor/magento/framework/Code/Generator/Autoloader.php

Magento\Framework\Code\Generatorনির্দিষ্ট নামকরণের নিদর্শনগুলির জন্য শ্রেণীর জন্য স্ক্যান (পরোক্ষভাবে শ্রেণীর মাধ্যমে ) স্ক্যান করবে। যদি শ্রেণীর নামটি শেষ হয় Interceptor, ম্যাজেন্টো generateClassএই ক্লাসে পদ্ধতিটির মাধ্যমে একটি ইন্টারসেপ্টার তৈরি করা শেষ করে

vendor/magento/framework/Code/Generator.php

এর থেকে খুঁজে বের করার জন্য অতিরিক্ত ক্লাস / অবজেক্ট রয়েছে Magento\Framework\Code\Generator- তবে আমরা এটি পাঠকের অনুশীলন হিসাবে ছেড়ে দেব।

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