Mục đích đối tượng bối cảnh trong hàm tạo của lớp DI là gì? Bối cảnh hoạt động như thế nào?


23

Trong hầu hết các Trình xây dựng của lớp, một đối tượng Ngữ cảnh được thông qua. Tôi không thể hiểu làm thế nào Context Obj này hoạt động. Tôi cũng nhận thấy rằng đôi khi điều này được truyền cho hàm tạo của lớp cha mẹ như bên dưới.

public function __construct(
    \Magento\Framework\App\Action\Context $context,
    \Magento\Catalog\Model\Design $catalogDesign,
    \Magento\Catalog\Model\Session $catalogSession,
....
    parent::__construct(
        $context,
        $layoutFactory,

Bạn có thể giải thích làm thế nào đối tượng bối cảnh cụ thể này hoạt động?

Câu trả lời:


30

Lưu ý rằng có các đối tượng Ngữ cảnh khác nhau, trong trường hợp này là \Magento\Framework\App\Action\Contextvà để hiểu nó, bạn nên đọc nó là "ActionContext". Nó đại diện cho bối cảnh ứng dụng trong đó hành động được thực thi. Nói cách khác, nó cung cấp cho bạn quyền truy cập vào tất cả các đối tượng với trạng thái ứng dụng mà hành động của bộ điều khiển cần, ví dụ như sổ đăng ký hoặc đối tượng yêu cầu.

Các lớp ngữ cảnh không có chức năng riêng, chúng chỉ là một thùng chứa cho các đối tượng khác. Bạn có thể xem chúng như lối tắt để không có 20 tham số trong mỗi hành động của bộ điều khiển. Tất cả các tham số phổ biến được hợp nhất trong đối tượng bối cảnh.


Làm thế nào tôi có thể biết đối tượng nào được chứa bởi khác nhau $context?
LucScu

@LucaS nhìn vào mã nguồn của họ. Bạn tìm thấy các lớp chứa trong hàm tạo bối cảnh
Fabian Schmengler

15

Các đối tượng bối cảnh được giới thiệu để cô lập các nhà phát triển bên thứ ba khỏi những thay đổi trong các hàm tạo của các lớp trừu tượng.

Trong Magento 1 Các lớp trừu tượng có nhiều hành vi "người trợ giúp" được coi là API thuận tiện cho trình mở rộng lớp. Điều này gây ra số lượng lớn các phương pháp và phụ thuộc tiềm ẩn trong lớp trừu tượng ( AbstractModel, AbstractBlock, AbstractAction)

Trong các API dựa trên thừa kế Magento 2 (chính xác hơn là SPI) không được khuyến khích, nhưng nhiều API kế thừa vẫn tồn tại. Ban đầu chúng tôi dự định loại bỏ dần hành vi bổ sung khỏi các lớp trừu tượng. Và để không phá vỡ tất cả các phần mở rộng khi chúng tôi sẽ loại bỏ một số phụ thuộc khỏi hàm tạo, chúng tôi đã giới thiệu các đối tượng Ngữ cảnh.

Kế hoạch hiện tại là từ bỏ các API dựa trên kế thừa với các API dựa trên giao diện tại một số điểm.

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.