Cách mà các trình trợ giúp được khởi tạo (ít nhất là cho mô-đun Backend (~ dev50) mới) thông qua helperFactory:
/**
* Return helper object
*
* @param string $name
* @return \Magento\Core\Helper\AbstractHelper
*/
public function helper($name)
{
return $this->_helperFactory->get($name);
}
Mà thực chất chỉ là một loại chuyên dụng của một nhà máy kiểu mẫu. Ví dụ: Magento \ Core \ Block \ Context dòng 143 (dev50) là một phần của hàm tạo:
\Magento\Core\Model\Factory\Helper $helperFactory
Nhà máy trợ giúp sẽ trả về mô hình được yêu cầu dựa trên tên lớp và đảm bảo rằng đó là instanceof
lớp trừu tượng của trình trợ giúp:
/**
* Get helper singleton
*
* @param string $className
* @param array $arguments
* @return \Magento\Core\Helper\AbstractHelper
* @throws \LogicException
*/
public function get($className, array $arguments = array())
{
$className = str_replace('_', '\\', $className);
/* Default helper class for a module */
if (strpos($className, '\Helper\\') === false) {
$className .= '\Helper\Data';
}
$helper = $this->_objectManager->get($className, $arguments);
if (false === ($helper instanceof \Magento\Core\Helper\AbstractHelper)) {
throw new \LogicException(
$className . ' doesn\'t extends Magento\App\Helper'
);
}
return $helper;
}
Nếu bạn tự thực hiện điều này thì có vẻ như lõi Magento đang tải nó theo một trong hai cách:
Cuộn nhà máy của riêng bạn:
$objectManager = \Magento\Core\Model\ObjectManager::getInstance();
$helperFactory = $objectManager->get('\Magento\Core\Model\Factory\Helper');
$helper = $helperFactory->get('\PulseStorm\Commercebug\Helper\Data');
Hoặc chỉ cần lấy nó trực tiếp:
$helper = \Magento\Core\Model\ObjectManager::getInstance()->get('Magento\Core\Helper\Data');