Hiểu về Magento Registry


13

Tôi đã luôn tự hỏi, tất cả các dữ liệu đăng ký được lưu trữ trong Magento ở đâu?

Tôi biết rằng ngay cả các đối tượng singleton được lưu trữ trong sổ đăng ký. Và registry chỉ là một biến mảng tĩnh của lớp Mage .

Tôi có một vài câu hỏi ở đây để giải tỏa sự nhầm lẫn của mình:

  1. Là đăng ký khác nhau cho người dùng khác nhau? Ý tôi là nó được tạo trên cơ sở mỗi người dùng (mỗi yêu cầu HTTP )?

Ví dụ,

Mage::register('foo', 'Hello World'); //set a value for foo
Mage::registry('foo'); //will this return hello world for all HTTP users ?
  1. Là dữ liệu đăng ký được lưu trữ trong phiên? Nếu không, Magento sẽ xác định người dùng nào đã gọi dữ liệu đăng ký?

Tôi đã đọc bài viết trên blog của Alan Storm cũng như câu trả lời của anh ấy trên StackOverFlow về vấn đề này. Nhưng tôi không thể giết chết sự nhầm lẫn. Xin hãy sửa tôi nếu tôi nghĩ những điều cơ bản của tôi bị rối tung. Cảm ơn




cảm ơn Amit Bera, tôi đã đọc bài báo đó và câu trả lời SOF của Alan trước khi đăng câu hỏi này. Tôi không thể nhận được câu trả lời của tôi từ đó.
Hashid

Câu trả lời:


23

Sổ đăng ký lưu trữ dữ liệu vào bộ nhớ dành riêng cho yêu cầu đó (chứ không phải người dùng hoặc bất cứ thứ gì khác) và chỉ tồn tại trong suốt thời gian của yêu cầu đó. Nguyên tắc thực sự rất đơn giản, Magelớp được khởi tạo như một đối tượng đơn lẻ cho mọi yêu cầu và đối tượng Mage được khởi tạo vẫn còn trong bộ nhớ và có thể truy cập được trong tất cả các lớp (và mẫu) cho đến khi yêu cầu hoàn thành và phản hồi được gửi.

Vì đối tượng là một singleton, bất cứ khi nào bạn truy cập nó, bạn sẽ nhận được cùng một đối tượng. Tất cả những gì đang xảy ra là bạn đang lưu trữ các giá trị cho đối tượng này, vì vậy khi một lớp lưu trữ một giá trị và một lớp khác truy cập thì cả hai đều làm việc trên cùng một đối tượng và lớp thứ hai có thể truy xuất giá trị mà lớp thứ nhất đã đặt.


1
Vì vậy, nó chỉ sống cho MỘT yêu cầu? Có nghĩa là nếu tôi tải một trang trong Magento, một yêu cầu là XONG và dữ liệu đăng ký bị xóa?
Hashid

4
Có giá trị bạn đặt với Mage::register()duy trì cho yêu cầu đó. Nếu bạn muốn lưu trữ dữ liệu cụ thể của người dùng, bạn nên sử dụng phiên, sổ đăng ký thực sự chỉ được thiết kế để làm cho dữ liệu di động giữa các lớp.
Jonathan Hussey

1
Điều đó có ý nghĩa! Áp dụng tương tự cho trường hợp singleton là tốt?
Hashid

1
Có chính xác như nhau - nếu bạn nhìn vào getSingleton()phương thức của Magelớp, nó thực sự lưu trữ dữ liệu vào sổ đăng ký.
Jonathan Hussey

3

Sổ đăng ký được lưu trữ trong bộ nhớ và theo yêu cầu HTTP, do đó bạn không thể chia sẻ dữ liệu giữa các yêu cầu hoặc người dùng khác nhau.


Nhưng Magento sẽ ánh xạ Yêu cầu HTTP và đăng ký như thế nào?
Hashid

2

Magento Registry được lưu trữ trong bộ nhớ của ứng dụng .

Khi tập lệnh của bạn chạy xong, mọi thứ bạn đã lưu trong sổ đăng ký đều biến mất, do đó không cần phải lo lắng về việc xóa nó (trừ khi tập lệnh bạn đang chạy đang lưu trữ các đối tượng lớn trong sổ đăng ký và đang lặp qua rất nhiều dữ liệu).

Trong trường hợp như vậy, bạn phải hủy đăng ký các mục của bạn khi bạn hoàn thành chúng.

Registry chỉ là một thuộc tính tĩnh của lớp Mage. xem để biết chi tiết

nhưng tôi vẫn không thể thực sự tìm ra một lời giải thích tốt

2) cho mỗi người dùng sẽ có đăng ký riêng cho mỗi yêu cầu trên máy chủ.

hy vọng điều này sẽ làm cho ít rõ ràng trong tâm trí của bạn


cảm ơn liyakat Tôi đã đọc prattski.com/2014/09/23/USE-the-magento-registry-mageregister trước khi đăng: P Nhưng Magento sẽ ánh xạ biến và người dùng như thế nào?
Hashid

1
@Hashid, bạn cũng có thể có thêm ý tưởng với blog của Alan. Làm thế nào đăng ký đang làm việc với từng yêu cầu trong mã theo. alanstorm.com/magento_registry_singleton_tutorial
liyakat

cũng đọc nó :-)
Hashid
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.