编译时参数类型不兼容

时间:2019-04-15 09:23:14

标签: compilation magento2

我们有一个自定义扩展程序,适用于magento 2.2.7上的mageplaza自定义pdf发票扩展程序。

mageplaza模块需要更新,所以我们做了。现在,更新的模块与其他扩展程序不兼容,该扩展程序修复了发票上magento2属性的布局...

所以应该一起使用的两个扩展是:

  • FrikandelX发票
  • Mageplaza / Pdfinvoice

不幸的是,当我们编译magento代码时,它会引发此错误:

编译期间的错误: FrikandelX \ Invoice \ Block \ Invoice \ Items
参数类型不兼容:必填类型: \ 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; 使用Magento \ Tax \ Helper \ Data;

类物品扩展了\ Mageplaza \ PdfInvoice \ Block \ Invoice \ Items {     受保护的$ _productRepository;

public function __construct(
    Context $context,
    Data $taxHelper,
    \Magento\Catalog\Api\ProductRepositoryInterface $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 个答案:

答案 0 :(得分:0)

有时,当您使用的IDE自动导入代码所引用的类或接口时,例如$data

在这种情况下,根据您的Data $taxHelper语句,注入到构造函数中的参数use的类型错误:

use Magento\Tax\Helper\Data;

因此,您需要确保Data $taxHelper参数实际上包含以下类型的数据:

Mageplaza\PdfInvoice\Helper\Data

希望有帮助。