ทำความเข้าใจกับ Magento Registry


13

ฉันสงสัยอยู่เสมอว่าข้อมูลรีจิสตรีทั้งหมดเก็บไว้ใน Magento ที่ไหน?

ฉันรู้ว่าแม้วัตถุเดี่ยวจะถูกเก็บไว้ในรีจิสทรี และรีจิสทรีเป็นเพียงตัวแปรอาเรย์แบบคงที่ของคลาสMage

ฉันมีคำถามสองสามข้อที่นี่เพื่อล้างความสับสนของฉัน:

  1. รีจิสทรีแตกต่างจากผู้ใช้อื่นหรือไม่? ฉันหมายความว่ามันถูกสร้างขึ้นบนพื้นฐานต่อผู้ใช้ (ต่อคำขอHTTP )?

ตัวอย่างเช่น,

Mage::register('foo', 'Hello World'); //set a value for foo
Mage::registry('foo'); //will this return hello world for all HTTP users ?
  1. ข้อมูลรีจิสทรีถูกจัดเก็บในเซสชันหรือไม่ หากไม่ใช่วีโอไอพีจะระบุได้อย่างไรว่าผู้ใช้รายใดเรียกข้อมูลรีจิสทรี

ฉันได้อ่านบทความบล็อกของ Alan Storm และคำตอบของเขาใน StackOverFlow เกี่ยวกับเรื่องนี้ แต่ฉันไม่สามารถฆ่าความสับสน โปรดแก้ไขฉันถ้าฉันคิดว่าพื้นฐานของฉันยุ่งเหยิง ขอบคุณ




ขอบคุณ Amit Bera ฉันอ่านบทความนั้นและคำตอบของ SOF โดย Alan ก่อนโพสต์คำถามนี้ ฉันไม่สามารถรับคำตอบจากที่นั่นได้
Hashid

คำตอบ:


23

รีจิสตรีจัดเก็บข้อมูลไปยังหน่วยความจำที่เฉพาะเจาะจงสำหรับการร้องขอนั้น(แทนที่จะเป็นผู้ใช้หรือสิ่งอื่นใด) และยังคงมีอยู่ตามระยะเวลาของการร้องขอนั้นเท่านั้น หลักการนั้นง่ายมากจริง ๆMageคลาสนั้นถูกสร้างเป็นวัตถุเดี่ยวสำหรับทุกคำขอและวัตถุ Mage ที่ถูกสร้างขึ้นยังคงอยู่ในหน่วยความจำและสามารถเข้าถึงได้ในทุกคลาส (และแม่แบบ) จนกว่าคำขอจะเสร็จสิ้นและส่งการตอบสนอง

เนื่องจากวัตถุเป็นซิงเกิลเมื่อใดก็ตามที่คุณเข้าถึงคุณจะได้รับวัตถุเดียวกัน สิ่งที่เกิดขึ้นคือคุณกำลังเก็บค่าลงในวัตถุนี้ดังนั้นเมื่อชั้นหนึ่งเก็บค่าและอีกอันหนึ่งเข้าถึงพวกเขากำลังทำงานบนวัตถุเดียวกันและชั้นที่สองสามารถเรียกคืนค่าชุดชั้นแรกได้


1
ดังนั้นมันจึงมีชีวิตอยู่เพียงเพื่อขอเดียว? หมายความว่าถ้าฉันโหลดหน้าใน Magento หนึ่งคำขอคือทำและข้อมูลรีจิสทรีถูกลบทิ้ง?
Hashid

4
ใช่ค่าที่คุณตั้งค่าด้วยMage::register()ยืนยันสำหรับคำขอนั้นเท่านั้น หากคุณต้องการเก็บข้อมูลเฉพาะของผู้ใช้คุณควรใช้เซสชันนั้นรีจิสทรีนั้นถูกออกแบบมาเพื่อให้พกพาข้อมูลระหว่างคลาสต่างๆ
Jonathan Hussey

1
นั่นทำให้รู้สึก! เช่นเดียวกันกับอินสแตนซ์เดี่ยวเช่นกัน?
Hashid

1
ใช่เหมือนกันทุกประการ- ถ้าคุณดูgetSingleton()วิธีการMageเรียนจริงมันจะเก็บข้อมูลไว้ในรีจิสทรี
Jonathan Hussey

3

รีจิสทรีถูกเก็บไว้ในหน่วยความจำและเป็นไปตามคำขอ HTTP ดังนั้นคุณจึงไม่สามารถแบ่งปันข้อมูลระหว่างคำขอหรือผู้ใช้ที่แตกต่างกัน


แต่ Magento จะแม็พคำขอ HTTP และรีจิสตรีได้อย่างไร
Hashid

2

วีโอไอพี Registry ที่เก็บไว้ในหน่วยความจำของโปรแกรมประยุกต์

เมื่อสคริปต์ของคุณทำงานเสร็จสิ่งที่คุณเก็บไว้ในรีจิสทรีจะหายไปดังนั้นไม่จำเป็นต้องกังวลเกี่ยวกับการล้างมันออก (เว้นแต่สคริปต์ที่คุณใช้อยู่นั้นจะเก็บวัตถุขนาดใหญ่ในรีจิสทรีและวนซ้ำไปมามากมาย ข้อมูล).

ในกรณีเช่นนี้คุณต้องยกเลิกการลงทะเบียนรายการของคุณเมื่อดำเนินการเสร็จ

Registry เป็นคุณสมบัติแบบคงที่ของคลาส Mage ดูรายละเอียด

แต่ถึงกระนั้นฉันก็ไม่สามารถหาคำอธิบายที่ดีได้

2) สำหรับผู้ใช้แต่ละคนจะมีการลงทะเบียนแยกต่างหากต่อคำขอบนเซิร์ฟเวอร์

หวังว่าสิ่งนี้จะทำให้ชัดเจนในใจของคุณ


ขอบคุณ liyakat ฉันอ่านprattski.com/2014/09/23/using-the-magento-registry-mageregisterก่อนโพสต์: P แต่ Magento จะทำแผนที่ตัวแปรและผู้ใช้อย่างไร
Hashid

1
@Hashid คุณจะได้รับแนวคิดเพิ่มเติมจากบล็อกของ Alan เช่นกัน วิธีการทำงานของรีจิสทรีกับแต่ละคำขอในรหัสติดตาม alanstorm.com/magento_registry_singleton_tutorial
liyakat

อ่านที่ดี :-)
Hashid
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.