我尝试从模块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,而不是第二个,并且不显示任何错误
有人可以向我解释我的错误在哪里吗?
编辑:我没有做任何更改,但现在可以正常工作。 还是谢谢你的答案
答案 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();
}