Как передать переменную id классу с внедрением зависимостей Symfony 3.4

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

Новый оператор ничего не знает о контейнере Symfony di. Вам придется передать зависимость самостоятельно. Возможно, вы захотите определить службу MerchantFactory и внедрить ее в свой контроллер. Затем вы можете сделать что-то вроде $merchant = $merchantFactory->create($id);

Cerad 26.06.2019 20:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
1
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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);

В 1-м и 2-м варианте я должен добавить - $this->currencyConverter = new CurrencyConverter(); $this->transactions = new TransactionTable();

GAV 27.06.2019 19:25

Другие вопросы по теме