เรียน Interceptor มีการดำเนินการตามรูปแบบการออกแบบ interceptor interceptors มีวิธีวิธีวีโอไอพี 2 ระบบวัตถุดำเนินระบบปลั๊กอิน
ในฐานะนักพัฒนาไคลเอ็นต์ทฤษฎีคือคุณไม่จำเป็นต้องกังวลเกี่ยวกับตัวดัก - คุณถามตัวจัดการวัตถุเพื่อหาวัตถุประเภท X และมันส่งคืนให้คุณ วัตถุที่คุณถามอาจจะใช่หรือไม่ใช่ interceptor แต่จากมุมมองโปรแกรมเมอร์ของลูกค้ามันทำตัวเหมือนกับรุ่นที่ไม่ใช่ interceptor ตัวจัดการวัตถุตัดสินใจที่จะส่งคืนหรือไม่ส่งคืน interceptor ในรายละเอียดการนำไปปฏิบัติ
สำหรับผู้ที่สนใจในรายละเอียดการนำไปใช้งาน - ถ้าคลาสหรือคลาสพาเรนต์ของคลาสนั้นมีการกำหนดค่าปลั๊กอินตัวจัดการวัตถุจะส่งกลับ interceptor คุณจะเห็นว่าในคลาส interceptor โหมดผู้พัฒนาที่นี่
#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;
}
สำหรับการผลิต (เช่นโหมดที่คอมไพล์) วีโอไอพีจะสแกนระบบล่วงหน้าระหว่างโหมดการรวบรวมและทำการบันทึกว่าคลาสใดต้องใช้ปลั๊กอิน
Magento จัดการสิ่งนี้ด้วย PHP autoloader หากผู้พัฒนาสร้างคลาสขึ้นมาทันที (หรือเรียกใช้เหตุการณ์ PHP autoload ด้วยชื่อคลาส (ในคำใบ้ประเภทclass_exists
คลาส ฯลฯ ) และออโต้โหลดที่ผู้แต่งใช้ไม่พบไฟล์คลาสเป็นออโต้โหลดที่ลงทะเบียนครั้งที่สอง
Magento\Framework\Code\Generator\Autoloader::load
ถูกทริกเกอร์ ออโต้โหลดนี้
vendor/magento/framework/Code/Generator/Autoloader.php
จะ (โดยอ้อมผ่านMagento\Framework\Code\Generator
คลาส) สแกนหาคลาสสำหรับรูปแบบการตั้งชื่อที่แน่นอน หากชื่อคลาสลงท้ายInterceptor
ด้วย Magento จะสร้าง Interceptor ด้วยgenerateClass
วิธีการในคลาสนี้
vendor/magento/framework/Code/Generator.php
มีคลาส / วัตถุเพิ่มเติมเพื่อติดตามออกจากMagento\Framework\Code\Generator
- แต่เราจะปล่อยให้เป็นแบบฝึกหัดสำหรับผู้อ่าน