Magento 2 - Получить URL-адрес изображения продукта в API
Я создаю пользовательский API в magento 2, и мне нужно получить URL-адрес изображения продукта.
Я использовал этот код для получения URL-адреса изображения:
$imageUrl = $this->listProductBlock->getImage($product,"category_page_grid")->getImageUrl();
Где $this->listProductBlock
- экземпляр \Magento\Catalog\Block\Product\ListProduct
С этим я получаю URL-адрес, подобный этому: ..static/version1574919158/webapi_rest/_view/en_US/Magento_Catalog/images/product/placeholder/.jpg
Я также пробовал класс imageBuilder
, но тоже не сработал.
Пожалуйста, помогите мне решить эту проблему.
3 answers
Вам просто нужно добавить экземпляр App\Emulation
в вашу модель и определить Area
. В вашем случае область AREA_FRONTEND
.
namespace YourPackage\YourModule\Model;
class YourApifilename implements \YourPackage\YourModule\Api\YourApiClassName
{
protected $appEmulation;
public function __construct(
\Magento\Store\Model\App\Emulation $appEmulation
)
{
$this->appEmulation = $appEmulation;
}
public Yourapimethod($param){
$this->appEmulation->startEnvironmentEmulation($storeId, \Magento\Framework\App\Area::AREA_FRONTEND, true);
/******** Do your work ******************/
$this->appEmulation->stopEnvironmentEmulation();
}
Я надеюсь, что это поможет
Это потому, что вы в настоящее время находитесь в области API
Вам нужно эмулировать свою область для внешнего интерфейса. Просто эмулируйте, и после получения изображения вам нужно вернуть эмуляцию, остановив эмуляцию.
startEnvironmentEmulation($storeId, \Magento\Framework\App\Area::AREA_FRONTEND, true);
И
stopEnvironmentEmulation();
С Magento\Store\Model\App\Emulation
экземпляром
Вы можете использовать этот.
protected $_productRepositoryFactory;
public function __construct(
\Magento\Catalog\Api\ProductRepositoryInterfaceFactory $productRepositoryFactory
) {
$this->_productRepositoryFactory = $productRepositoryFactory;
}
И вы можете получить изображение таким образом.
$product = $this->_productRepositoryFactory->create()->getById($item->getProductId());
$product->getData('image');
$product->getData('thumbnail');
$product->getData('small_image');