Đừng.
Điều này giống như sử dụng ObjectManager::getInstance()->create()
trong một mẫu!
Thay vào đó, sử dụng Khối tùy chỉnh nhận trình trợ giúp dưới dạng phụ thuộc của hàm tạo và thêm phương thức proxy gọi phương thức trình trợ giúp.
Trong mẫu:
$block->customMethod()
Trong khối:
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();
}
Trong nguyên tắc OOP, điều này tránh vi phạm "Luật của Demeter". Nó đóng gói logic nghiệp vụ trong khối thay vì mẫu. Là một tác dụng phụ, nó cũng làm cho logic dễ kiểm tra hơn khi logic được chuyển vào khối.
Về logic nào được đưa vào các lớp của trình trợ giúp, tôi thấy rằng trong trình trợ giúp Magento 2 hầu như có ý nghĩa đối với các dịch vụ, giống như một mô hình không phải là mô hình, nhưng chứa mã có thể sử dụng lại, ví dụ như định dạng giá (có trong lõi, nhưng tôi có thể Tôi không nghĩ đến một ví dụ tốt hơn ngay bây giờ).
di.xml
cho loại lớp khối, không giữ một số cấu hình bố cục. Tôi đã thử ví dụ để làm điều đó cho lớp\Magento\Catalog\Block\Product\View\Type\Simple
, mẫudefault.phtml
được sử dụng trong mẫu của chúng tôi bị bỏ qua. Không biết tại sao vào lúc này