Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带参数的magento 2加载类_Php_Magento2 - Fatal编程技术网

Php 带参数的magento 2加载类

Php 带参数的magento 2加载类,php,magento2,Php,Magento2,我有个简单的问题 我正在尝试将此类加载到我自己的类中: 逻辑上是在构造中调用它: \Picqer\Financials\Moneybird\Moneybird$Moneybird 但问题是它需要事先建立\Picqer\Financials\Moneybird\Connection 那么,我如何在代码中使用它: class OnepageControllerSuccessAction implements \Magento\Framework\Event\ObserverInterface {

我有个简单的问题 我正在尝试将此类加载到我自己的类中:

逻辑上是在构造中调用它: \Picqer\Financials\Moneybird\Moneybird$Moneybird

但问题是它需要事先建立\Picqer\Financials\Moneybird\Connection

那么,我如何在代码中使用它:

class OnepageControllerSuccessAction implements \Magento\Framework\Event\ObserverInterface
{
    protected $_order;
    protected $_connection;
    protected $_invoiceFactory;
    protected $_moneybird;

    public function __construct(
        \Magento\Sales\Api\Data\OrderInterface $order,
        \Picqer\Financials\Moneybird\Connection $connection,
        \Picqer\Financials\Moneybird\Moneybird $moneybird,
        \Wemessage\Moneybird\Model\InvoiceFactory $invoiceFactory
    ){
        $this->_order = $order;
        $this->_connection = $connection;
        $this->_invoiceFactory = $invoiceFactory;
        $this->_moneybird = $moneybird;
    }
...
public function execute(
    \Magento\Framework\Event\Observer $observer
) {

    $orderids = $observer->getEvent()->getOrderIds();
    foreach($orderids as $orderid){
        $order = $this->_order->load($orderid);
        $this->_connection->setRedirectUrl('');
        ...
        // connection has been established and now we need to pass it to the moneybird
        $moneybird = $this->_moneybird($this->_connection);
这将导致错误:PHP致命错误:未捕获错误:函数名必须是字符串

解决这个问题的一种方法是在该类中添加方法setConnection并调用它,但问题是composer正在从存储库下载它,所以如果我想在另一个安装中使用我的模块,我必须执行相同的步骤

还有其他解决办法吗

添加了moneybird文件的构造:

/**
     * Moneybird constructor.
     * @param \Picqer\Financials\Moneybird\Connection $connection
     */
    public function __construct(Connection $connection)
    {
        $this->connection = $connection;
    }

因此,它不会导致混乱和不必要的问题。

给定的代码在哪里抛出错误消息?$moneybird=$this->\u moneybird($this->\u连接);这会产生错误$this->\u连接是一个对象,您没有调用类的任何方法\u moneybird??这有意义吗?你不能将一个类的实例作为另一个实例的参数传递。如果你想调用构造函数,为什么不这样做呢?显然,
$this->\u moneybird
是一个实例化类,给定代码在哪里抛出错误消息?$moneybird=$this->\u moneybird($this->\u连接);这会产生错误$this->\u连接是一个对象,您没有调用类的任何方法\u moneybird??这有意义吗?你不能将一个类的实例作为另一个实例的参数传递。如果你想调用构造函数,为什么不这样做呢?显然,
$this->\u moneybird
是一个实例化的类