W Magento 1, jeśli chcesz przekazać dane z akcji Kontrolera do „Widoku” (tzn. Bloku w twoim układzie, możesz)
Dodaj wartość / obiekt do rejestru globalnego za pomocą
Mage::register
Bezpośrednio pobierz obiekt bloku i ustaw właściwości danych w pobranym obiekcie bloku po uruchomieniu
loadLayout
Wywołaj metody na obiektach blokowych w
phtml
plikach i pozwól obiektom blokowym używać warstwy modelu / bazy danych do odczytu danych zapisanych wcześniej w akcji kontrolera
Wydaje się, że używanie metod obiektów blokowych do odczytu z bazy danych nadal działa w Magento 2 - co jest odpowiednie dla niektórych rodzajów operacji. Jednak,
W Magento 2 nie ma już globalnego rejestru (czy istnieje?)
System układu działa teraz, tworząc obiekt strony za pomocą fabryki, i nie możesz pobierać odniesień do bloków w taki sam sposób, jak w Magento 1
Czy w Magento 2 można przesyłać dane bezpośrednio z akcji kontrolera do widoku? A może jest to zbyt bezpośredni wzór dla nowego wspaniałego świata Design Pattern ™ Magento? Jeśli jest to zbyt bezpośredni wzorzec, co należy zrobić, jeśli istnieją jakieś obliczone informacje, które chcemy wyświetlić w szablonie, ale nie chcemy przechowywać tych informacji w systemie stanowym (tzn. Nie chcemy zapisywać ich w Baza danych)
Mogę wymyślić kilka różnych sposobów na zhakowanie tego razem - ale interesuje mnie, jak Magento 2 chce, abyś to zrobił.
Uwaga : Zdaję sobie sprawę, że można pobrać instancję bloku w akcji kontrolera za pomocą czegoś takiego
$resultPage = $this->resultPageFactory->create();
$block = $resultPage->getLayout()->getBlock('catalog.wysiwyg.js');
var_dump(spl_object_hash($block));
Kod podstawowy Magento 2 robi to często. Jednak - obiekt bloku pobrany z obiektu kontrolera wydaje się być innym obiektem niż jest dostępny w phtml
szablonie za pośrednictwem jednego $this
lub $block
(pierwszy ( $this
) wydaje się być obiektem, który faktycznie renderuje szablon, podczas gdy drugi ( $block
) wydaje się być wystąpienie typu Magento Block).
#File: path/to/template.phtml
var_dump(spl_object_hash($block));
var_dump(spl_object_hash($this));
Mówię „wydaje się być”, ponieważ jeśli ustawię dane w metodzie akcji kontrolera, nie będą one dostępne w phtml
szablonie - i jeśli porównam spl_object_hash
powyższe wyniki, otrzymam trzy różne wartości skrótu. Jestem jednak na tyle nowy, że powyższy może być innym błędem, który popełniłem - więc jeśli udało Ci się ustawić dane na blokach i pobrać je w szablonie, chciałbym o tym usłyszeć !
Należy nie Przekazywanie zmiennych z akcji kontrolera do widoku. Użyj bloku, aby przekazać zmienne do widoku (silnik szablonów).
źródło