Несовместимый тип аргумента при компиляции

#compilation #magento2

#Сборник #magento2

Вопрос:

У нас есть пользовательское расширение, которое работало над расширением пользовательского PDF-счета mageplaza в magento 2.2.7.

Модуль mageplaza необходимо было обновить, что мы и сделали. Теперь обновленный модуль несовместим с другим расширением, которое исправляет расположение атрибутов magento2 в накладной…

Итак, два расширения, которые должны работать вместе::

  • Накладная FrikandelX
  • Mageplaza/Pdfinvoice

К сожалению, когда мы компилировали код magento, он выдает эту ошибку:

Ошибки во время компиляции: FrikandelX Invoice Block InvoiceItems
Несовместимый тип аргумента: Требуемый тип: Mageplaza PdfInvoice Helper Data. Фактический тип: массив; Файл:

/xx/Xx/mage227-dev/app/code/FrikandelX/Invoice/Block/Invoice/Items.php

Общее количество ошибок: 1

Это файл FrikandelX:

/public_html/app/code/FrikandelX/Invoice/Block/Invoice/Items.php

используйте Magento Framework View Element Template Context; используйте MagentoTax Helper Data;

класс Items расширяет MageplazaPdfInvoiceBlockInvoiceItems{ защищенный $_productRepository;

 public function __construct(
    Context $context,
    Data $taxHelper,
    MagentoCatalogApiProductRepositoryInterface $productRepository,
    array $data = []
)
{
    parent::__construct($context, $taxHelper, $data);
    $this->_productRepository = $productRepository;
}

public function getProduct($sku)
{
    try {
        $product = $this->_productRepository->get($sku);
    } catch (Exception $e) {
        return false;
    }

    return $product;
}

private function _getProduct($sku)
{
    try {
        $product = $this->_productRepository->get($sku);
    } catch (Exception $e) {
        var_dump($sku);
        exit($e->getMessage());
    }
    die;
}

public function getDiscount($item, $product, $invoice)
{
    if($item->getPrice() == $product->getPrice()){
        $discountAmount = $item->getDiscountAmount();
        if($discountAmount){

            $rowTotalDiscounted = $item->getRowTotal() - $discountAmount;
            $rowTotal = $product->getPrice() * $item->getQty();
            $item->setRowTotal($rowTotalDiscounted);


            $invoice->setSubTotal($invoice->getSubTotal() - $rowTotal   $rowTotalDiscounted);


            $invoice->setDiscountAmount(null);


            return 100 - round($rowTotalDiscounted / $rowTotal * 100, 0);
        }

        return '0';
    }

    return 100 - round($item->getPrice() / $product->getPrice() * 100, 0);
}
  

}

Любая помощь будет высоко оценена. Надеюсь, я объяснил это ясно и большое вам спасибо за вашу помощь!

Ответ №1:

Иногда это происходит, когда используемая вами среда IDE автоматически импортирует классы или интерфейсы, на которые ссылается код, например $data .

В этом случае параметр Data $taxHelper , который вводится в конструктор, имеет неправильный тип в соответствии use с инструкцией you:

 use MagentoTaxHelperData;
  

Поэтому вам нужно убедиться, что Data $taxHelper параметр действительно содержит данные типа:

 MageplazaPdfInvoiceHelperData
  

Надеюсь, это поможет.