【问题标题】:How do I pass an id variable to a class which has dependency injection Symfony 3.4如何将 id 变量传递给具有依赖注入 Symfony 3.4 的类
【发布时间】:2019-11-08 18:26:08
【问题描述】:

我有一个使用依赖注入的类,还有另外两个类,这很好用。但是我想在控制器中实例化 Merchant 类并传递一个 id 。我没有得到的是构造函数期望更多的值'CurrencyConverter'和'TransactionTable'那么我该如何完成代码? ?,我不需要通过。所以我不清楚如何使它工作,谢谢

模型类

namespace TransactionBundle\Model;

class Merchant
{
public $_transactions;
public $_currencyConverter;
public $_id;

public function __construct($id,CurrencyConverter                    
    $currencyConverter,TransactionTable $transactions)
{
    $this->_transactions = $transactions;
    $this->_currencyConverter = $currencyConverter;
    $this->_id = $id;

}

public function getTransactions() {

    $this->_currencyConverter->convert();

    $this->_transactions->getData();       

}

}

trying to instantiate in the controller

$merchant = new Merchant(2,?,?);

$results = $merchant->getTransactions();

【问题讨论】:

  • 新操作员对 Symfony di 容器一无所知。您必须自己传递依赖项。您可能想要的是定义一个 MerchantFactory 服务并将其注入您的控制器。然后你可能会做类似 $merchant = $merchantFactory->create($id);

标签: symfony dependency-injection


【解决方案1】:

如果类依赖于容器中不存在的东西,则无法从容器中加载该类。

要么自己在控制器中传递依赖:

$merchant = new Merchant(2, $currencyConverter, $transactions);

或者在容器中使用工厂服务:

class MerchantFactory {
    private $currencyConverter;
    private $transactions;

    // constructor omitted for brevity

    public function getMerchantForId($id) {
        return new Merchant($id, $this->currencyConverter, $this->transactions);
    }
}

然后在你的控制器中,依赖于工厂:

$merchant = $this->merchantFactory->getMerchantForId(2);

【讨论】:

  • 在第一个和第二个选项中,我必须添加 - $this->currencyConverter = new CurrencyConverter(); $this->transactions = new TransactionTable();
猜你喜欢
  • 2019-12-28
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多