DI statement – add dynamic arguments
- Barbarossa
- Člen | 74
Ahoj, prosím o radu. Rád bych si zaregistroval službu v DI, ale nedaří
se mi předat potřebné argumenty.
Je to služba třetí strany a bohužel je ten přístup takový jaký
je :(
Běžné použití
$client = new Client([
'projectId' => 'xxx',
]);
$pack = $client->pack('pack-name'); // vrací třídu Pack()
$adapter = new Adapter($client, $pack);
DI extension (návrh)
$builder->addDefinition($this->prefix('client'))
->setFactory(Client::class)
->setArguments([
['projectId' => 'xxx']
]);
// potřebuji ideálně Statement (kvůli další návaznosti)
$statement = new Statement(Adapter::class, [
// Client se v pohodě předá - už je zaregistrovaný ale jak z něho převzít ten pack a předat ho sem jako argument?
]);
Díky za každou radu
Editoval Barbarossa (16. 4. 2019 20:53)
- h4kuna
- Backer | 740
jsou dvě možnosti
- pack vyrobíš jako definition
$builder->addDefinition($this->prefix('pack'))
->setFactory($this->prefix('@client') . '::pack', ['pack-name']);
- nebo by to mohlo jít rovnou zařídit pomocí Statement
$statement = new Statement(Adapter::class, [
//client,
new Statement($this->prefix('@client') . '::pack', ['pack-name'])
]);
kód jsem netestoval