Nie rób
To jest jak używanie ObjectManager::getInstance()->create()
w szablonie!
Zamiast tego użyj niestandardowego bloku, który odbiera pomocnika jako zależność konstruktora, i dodaj metodę proxy, która wywołuje metodę pomocnika.
W szablonie:
$block->customMethod()
W bloku:
public function __construct(Path/To/Helper/Class $helperClass, ...other dependencies...)
{
$this->helper = $helperClass;
// ...other assignments and call to parent::__construct()
}
public function customMethod()
{
return $this->helper->customMethod();
}
Mówiąc zgodnie z zasadą OOP, pozwala to uniknąć naruszenia „Prawa Demetera”. Zawiera szablon logiki biznesowej w bloku zamiast szablonu. Jako efekt uboczny powoduje również, że logika jest bardziej testowalna, gdy logika jest przenoszona do bloku.
Jeśli chodzi o logikę przypisaną klasom pomocniczym, stwierdzam, że w Magento 2 pomocnicy mają sens przede wszystkim dla usług, takich jak coś, co nie jest modelem, ale zawiera kod wielokrotnego użytku, na przykład formatowanie ceny (które jest zawarte w rdzeniu, ale mogę Pomyśl teraz o lepszym przykładzie).
di.xml
dla typu klasy bloków, nie zachowuj żadnej konfiguracji układu. Próbowałem na przykład zrobić to dla klasy\Magento\Catalog\Block\Product\View\Type\Simple
, szablondefault.phtml
użyty w naszym szablonie jest ignorowany. NieWidzę pomocników jako funkcje globalne w twoim module (przepraszam za słowo „globalny”), a kontrakty menedżerskie / usługowe jako funkcje globalne, które mogą być używane zarówno wewnątrz, jak i na zewnątrz modułu.
Jeśli będziesz przestrzegać tej zasady, zobaczysz, że pomocnicy mają minimalne zastosowanie, używam ich tylko jako opakowania konfiguracji w moich modułach.
Tego rodzaju rzeczy. Jeśli masz inne funkcje, które mogą być praktyczne poza modułem, utwórz menedżera.
W idealnym świecie zewnętrzni programiści, którzy potrzebują funkcjonalności innych modułów, powinni jedynie szukać dostępnych interfejsów repozytoriów, menedżerów i innych elementów w
Api
folderze -folder.źródło