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




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