使用 以编程方式在简单的 PHP 文件中加载产品的解决方案ObjectManager
,但 Magento 2 不推荐此解决方案。
<?php
include('app/bootstrap.php');
use Magento\Framework\App\Bootstrap;
$bootstrap = Bootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();
$state = $objectManager->get('Magento\Framework\App\State');
$state->setAreaCode('frontend');
$productId = 1;
$product = $objectManager->create('Magento\Catalog\Model\Product')->load($productId);
echo $product->getName();
?>
推荐解决方案(Magento 2)
在 Magento 2 中,推荐的加载产品的方法是使用适当的自定义模块而不是简单的 PHP 文件ProductRepository
。ProductFactory
好吧,通过使用以下(推荐)代码,您可以在自定义块中加载产品。
ProductFactory
解决方案
<?php
namespace [Vendor_Name]\[Module_Name]\Block;
use Magento\Catalog\Model\ProductFactory;
class Product extends \Magento\Framework\View\Element\Template
{
protected $_productloader;
public function __construct(
ProductFactory $_productloader
) {
$this->_productloader = $_productloader;
}
public function getLoadProduct($id)
{
return $this->_productloader->create()->load($id);
}
}
在 Magento 2.1 中
ProductRepository
解决方案
namespace [Vendor_Name]\[Module_Name]\Block;
use Magento\Catalog\Api\ProductRepositoryInterface;
class Product extends \Magento\Framework\View\Element\Template
{
protected $_productRepository;
public function __construct(
ProductRepositoryInterface $productRepository
) {
$this->_productRepository = $productRepository;
}
public function getProduct($id)
{
return $product = $this->productRepository->getById($id);
}
}
并且,您的.phtml
文件应如下所示:
$productId = 1;
$product = $this->getLoadProduct($productId);
echo $product->getName();
我希望,您已经知道如何在 Magento 2 中创建自定义模块,或者如果您想阅读这篇博客文章如何在 Magento 2 中创建基本模块