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, но тоже не сработал.

Пожалуйста, помогите мне решить эту проблему.

Author: Muhammad Hasham, 2019-11-28

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();
    }

Я надеюсь, что это поможет

 3
Author: Muhammad Hasham, 2019-11-28 06:01:36

Это потому, что вы в настоящее время находитесь в области API

Вам нужно эмулировать свою область для внешнего интерфейса. Просто эмулируйте, и после получения изображения вам нужно вернуть эмуляцию, остановив эмуляцию.

startEnvironmentEmulation($storeId, \Magento\Framework\App\Area::AREA_FRONTEND, true);

И

stopEnvironmentEmulation();

С Magento\Store\Model\App\Emulation экземпляром

 3
Author: Muhammad Anas, 2019-11-28 06:18:07

Вы можете использовать этот.

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');
 2
Author: Jaydeep Charadva, 2019-11-28 06:11:48