Как передать переменную id в класс, в котором есть внедрение зависимостей Symfony 3.4 - PullRequest
0 голосов
/ 26 июня 2019

У меня есть класс, который использует Dependency Injection, с двумя другими классами, это работает отлично.Но я хочу затем создать экземпляр класса Merchant в контроллере и передать идентификатор.Что я не понимаю, так это то, что конструктор ожидает больше значений "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();

1 Ответ

4 голосов
/ 27 июня 2019

Если у класса есть зависимость от чего-то, чего нет в контейнере, то класс не может быть загружен из контейнера.

Либо самостоятельно передайте зависимости в контроллер:

$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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...