Trong Magento 1, nếu bạn muốn chuyển dữ liệu từ hành động Bộ điều khiển của mình sang "Chế độ xem" (nghĩa là một khối trong bố cục của bạn, bạn có thể)
Thêm một giá trị / đối tượng vào sổ đăng ký toàn cầu thông qua
Mage::register
Tìm nạp trực tiếp một đối tượng khối và đặt thuộc tính dữ liệu trên đối tượng khối được tìm nạp sau khi chạy
loadLayout
Gọi các phương thức trên các đối tượng khối trong
phtml
các tệp và để các đối tượng khối sử dụng lớp mô hình / cơ sở dữ liệu để đọc dữ liệu được lưu trước đó trong hành động của bộ điều khiển
Sử dụng các phương thức đối tượng khối để đọc từ cơ sở dữ liệu vẫn có vẻ hoạt động trong Magento 2 - phù hợp với một số loại hoạt động nhất định. Tuy nhiên,
Không còn đăng ký toàn cầu trong Magento 2 (hoặc có?)
Hệ thống bố cục hiện hoạt động bằng cách tạo một đối tượng trang thông qua một nhà máy và bạn không thể lấy các tham chiếu khối giống như cách bạn có thể làm trong Magento 1
Magento 2 có thể truyền dữ liệu trực tiếp từ hành động của bộ điều khiển xuống chế độ xem không? Hay đây là mô hình quá trực tiếp cho thế giới Mẫu thiết kế mới dũng cảm của Magento? Nếu đây là mẫu quá trực tiếp, thì nên làm gì nếu có một số thông tin được tính toán mà chúng tôi muốn hiển thị trong một mẫu, nhưng không muốn lưu trữ thông tin đó vào một hệ thống trạng thái (nghĩa là chúng tôi không muốn lưu nó vào cơ sở dữ liệu)
Tôi có thể nghĩ ra một vài cách khác nhau để tự mình hack cái này - nhưng tôi quan tâm đến việc Magento 2 muốn bạn làm điều đó như thế nào.
Lưu ý : Tôi nhận thấy có thể tìm nạp một thể hiện khối trong hành động của bộ điều khiển bằng cách sử dụng cái gì đó như thế này
$resultPage = $this->resultPageFactory->create();
$block = $resultPage->getLayout()->getBlock('catalog.wysiwyg.js');
var_dump(spl_object_hash($block));
Mã lõi Magento 2 làm điều này thường xuyên. Tuy nhiên - đối tượng khối được tìm nạp trong đối tượng điều khiển dường như là một đối tượng khác với đối tượng có sẵn trong một phtml
mẫu thông qua $this
hoặc $block
(trước đây ( $this
) dường như là đối tượng thực sự biểu hiện khuôn mẫu, trong khi đối tượng sau ( $block
) dường như là một thể hiện của loại Khối Magento).
#File: path/to/template.phtml
var_dump(spl_object_hash($block));
var_dump(spl_object_hash($this));
Tôi nói "dường như là" bởi vì nếu tôi đặt dữ liệu trong phương thức hành động của bộ điều khiển, nó không có sẵn trong phtml
mẫu - và nếu tôi so sánh các spl_object_hash
kết quả ở trên, tôi sẽ nhận được ba giá trị băm khác nhau. Tuy nhiên, tôi mới đủ để tất cả những điều này có thể là một số lỗi khác mà tôi đã mắc phải - vì vậy nếu bạn có thể đặt dữ liệu trên các khối và tìm nạp nó trong một mẫu tôi muốn nghe về nó !