Memahami Registry Magento

13

Saya selalu bertanya-tanya, di mana semua data registri disimpan di Magento?

Saya tahu bahwa objek tunggal disimpan dalam registri. Dan registri hanyalah variabel array statis dari kelas Mage .

Saya punya beberapa pertanyaan di sini untuk menghapus kebingungan saya:

  1. Apakah registri berbeda untuk pengguna yang berbeda? Maksud saya apakah ini dibuat berdasarkan per pengguna (per permintaan HTTP )?

Sebagai contoh,

Mage::register('foo', 'Hello World'); //set a value for foo
Mage::registry('foo'); //will this return hello world for all HTTP users ?
  1. Apakah data registri disimpan dalam sesi? Jika tidak, bagaimana Magento akan mengidentifikasi pengguna mana yang meminta data registri?

Saya telah membaca artikel blog Alan Storm dan juga jawabannya di StackOverFlow mengenai hal ini. Tetapi saya tidak bisa membunuh kebingungan itu. Harap perbaiki saya. Jika saya pikir dasar-dasar saya kacau. Terima kasih

Hashid
sumber
terima kasih Amit Bera, saya membaca artikel itu dan jawaban SOF oleh Alan sebelum memposting pertanyaan ini. Saya tidak bisa mendapatkan jawaban dari sana.
Hashid

Jawaban:

23

Registri menyimpan data ke memori yang khusus untuk permintaan itu (bukan pengguna atau apa pun), dan bertahan selama durasi permintaan itu saja. Prinsipnya benar-benar sangat sederhana, Magekelas dipakai sebagai objek tunggal untuk setiap permintaan dan objek Mage yang dipakai tetap ada dalam memori, dan dapat diakses di semua kelas (dan templat) hingga permintaan selesai dan respons dikirim.

Karena objek tersebut adalah singleton, setiap kali Anda mengaksesnya Anda mendapatkan objek yang sama. Semua yang terjadi adalah bahwa Anda menyimpan nilai ke objek ini, jadi ketika satu kelas menyimpan nilai, dan yang lain mengaksesnya mereka berdua bekerja pada objek yang sama dan kelas kedua dapat mengambil nilai set kelas pertama.

Jonathan Hussey
sumber
1
Jadi ini hidup hanya untuk SATU permintaan? Berarti jika saya memuat halaman di Magento, satu permintaan DILAKUKAN dan data registri memerah?
Hashid
4
Nilai ya yang Anda tetapkan dengan hanya Mage::register()untuk permintaan itu. Jika Anda ingin menyimpan data spesifik pengguna Anda harus menggunakan sesi, registri benar-benar hanya dirancang untuk membuat data portabel antar kelas.
Jonathan Hussey
1
itu masuk akal! Hal yang sama berlaku untuk instance singleton juga?
Hashid
1
Ya persis sama - jika Anda melihat getSingleton()metode Magekelas itu sebenarnya menyimpan data ke registri.
Jonathan Hussey
3

Registri disimpan dalam memori dan sesuai permintaan HTTP, sehingga Anda tidak dapat berbagi data antara permintaan atau pengguna yang berbeda.

Vladimir Kerkhoff
sumber
Tetapi bagaimana Magento akan memetakan Permintaan HTTP dan registri?
Hashid
2

Registry Magento disimpan dalam memori aplikasi .

ketika skrip Anda selesai dijalankan, apa pun yang Anda simpan dalam registri hilang, jadi tidak perlu khawatir untuk menghapusnya (kecuali skrip yang sedang Anda jalankan menyimpan benda-benda besar di dalam registri dan sedang mengulang banyak data).

Dalam hal demikian, Anda harus membatalkan pendaftaran entri Anda setelah selesai.

Registry hanyalah properti statis dari kelas Mage. lihat detailnya

tapi tetap saja saya tidak bisa menemukan penjelasan yang bagus

2) untuk setiap pengguna akan ada registri terpisah per permintaan di server.

Saya harap ini akan membuat sedikit jelas dalam pikiran Anda

liyakat
sumber
terima kasih liyakat. Saya membaca prattski.com/2014/09/23/using-the-magento-registry-mageregister sebelum memposting: P Tapi bagaimana Magento akan memetakan variabel dan pengguna?
Hashid
1
@ Hashid, Anda bisa mendapatkan lebih banyak ide dengan blog Alan juga. bagaimana registri bekerja dengan setiap permintaan dalam kode, ikuti. alanstorm.com/magento_registry_singleton_tutorial
liyakat
baca juga :-)
Hashid