如何从一个模块调用功能到另一个Magento 2

时间:2019-07-24 10:07:07

标签: magento2 magento-2.3

我尝试从模块A调用功能到模块B 这是模块A代码

namespace A\Epayment\Model;
  class Etransactions
    {
      public function customPayment{
        return "test";
      }

和模块b代码

  namespace B\Payment\Controller\Index;

class Payment extends \Magento\Framework\App\Action\Action
{
    protected $_pageFactory;
    protected $_transaction;

    public function __construct(
        \Magento\Framework\App\Action\Context $context,
        \Magento\Framework\View\Result\PageFactory $pageFactory,
        \ETransactions\Epayment\Model\Etransactions $transaction
    )
    {
        $this->_pageFactory = $pageFactory;
        $this->_transaction = $transaction;
        parent::__construct($context);
    }

    public function execute()
    {
        echo "Hello World".PHP_EOL;
        $foo="a";
        echo $foo;
        echo $this->_transaction->customPayment();
        //echo $this->customPayment();
        echo $foo;

        exit;
    }
}

此代码返回“ hello world”,第一个$ foo,而不是第二个,并且不显示任何错误

有人可以向我解释我的错误在哪里吗?

编辑:我没有做任何更改,但现在可以正常工作。 还是谢谢你的答案

2 个答案:

答案 0 :(得分:0)

您要创建要注入的路径的对象不正确。

 public function __construct(
        \Magento\Framework\App\Action\Context $context,
        \Magento\Framework\View\Result\PageFactory $pageFactory,
        \A\Epayment\Model\Etransactions $transaction // changes are here
    )
    {
        $this->_pageFactory = $pageFactory;
        $this->_transaction = $transaction;
        parent::__construct($context);
    }

请使用异常处理。

try{
$this->_transaction->customPayment();
}catch(Exception $e){
//log your exception here.
}

答案 1 :(得分:0)

在Magento中,可以在任何地方(块,控制器,模型,观察者,视图)使用Helper类。因此,您应该在助手类中创建一个方法,并通过以下方式在任何地方调用它。

声明助手类和方法: ModuleA\Epayment\Helper\Data

<?php
namespace ModuleA\Epayment\Helper;

class Data extends \Magento\Framework\App\Helper\AbstractHelper
{
    public function yourHelperMethod()
    {
        # code...
    }
}

调用方法:

$helper = $this->_objectManager->create(ModuleA\Epayment\Helper\Data::class);
$helper->yourHelperMethod();

注意:如果您的班级中未注入对象管理器。请按照以下步骤操作:

1)声明私有财产:

private $_objectManager;

2)注入构造函数以进行初始化:

public function __construct(
    \Magento\Framework\ObjectManagerInterface $objectmanager
) {
    $this->_objectManager = $objectmanager;
}

3)以某种方式使用:

public function someMethod() {
    $helper = $this->_objectManager->create(ModuleA\Epayment\Helper\Data::class);
    $helper->yourHelperMethod();
}