Moznost pridat alias sluzby v konfiguraci

před 2 lety

xr
Backer | 93
+
0
-

Ahoj,

Je nejaka moznost pridat alias sluzby v konfiguracii?

Nieco taketo:

<?php
//neon
services:
	foo: My\Foo\Service

	# alias
	bar: @foo
?>

Vyssie uvedene je fajn a funguje, pokial nepouzivate dekoratory. Avsak pokial dekoratory pouzivate,

<?php
//neon
decorator:
	My\Foo\Service:
		setup:
			- callFooSetup
?>

metoda callFooSetup bude volana dvakrat, pretoze vo vygenerovanom DI kontajneri createServiceBar interne vola createServiceFoo, ale callFooSetup volanie sa nachadza v oboch metodach.

To ma neziaduce ucinky. Je mozne nejako pridat alias sluzby bez DI rozsirenia a uprav v PHP kode Nette? Diky!

Existuje ContainerBuilder::addAlias metoda, ale je ju samozrejme mozne volat len pocas vytvarania kontajneru v DI rozsireniach.

před 2 lety

David Grudl
Nette Core | 7145
+
0
-

Ano, bar: @foo není alias, ale vytvoření nové služby. Alias lze přidat jen přes DI rozšíření.

před 2 lety

xr
Backer | 93
+
+1
-

Mozno by bolo pekne take nieco dorobit, nemyslis? Skusim sa na to pozriet.

před 2 lety

xr
Backer | 93
+
+1
-

No ved ano – ak to dava zmysel, pozriem na to.

před 2 lety

David Grudl
Nette Core | 7145
+
0
-

A k čemu je to užitečné? U těch extensions to existuje jen z důvodu zpětné kompatibility, ale proč to dělat v konfigu nevím.

před 2 lety

xr
Backer | 93
+
0
-

Robim nejaku magiu so sluzbami a potrebujem, aby pouzivali istu konvenciu nazvov. Zaroven vsak potrebujem, aby sa volali tak, ako boli povodne navrhnute (kvoli logickemu rozdeleniu). Je to zlozite na vysvetlenie.

Zjednodusene:
mam sluzbu logicky zaclenenu k nejakej casti aplikacie moduleA.fooService, ale zaroven chcem na rovnaku sluzbu pristupit aj pomocou featureA.fooService, inak povedane, sluzbu potrebujem logicky zadelit do dalsej skupiny.

Chapem, ze je to okrajovy pripad.

Ak chces podotknut, ze aj tak nie je vhodne na sluzby pristupovat pomocou nazvu (vzhladom na princip DI), tak mas pravdu, ale potrebujem to z dovodu cyklickych zavislosti a poziadavku na „lazy loading“ sluzieb.

před 2 lety

David Grudl
Nette Core | 7145
+
0
-

Tak to vyřeš tou extension a je to.

před 2 lety

xr
Backer | 93
+
+3
-

Tak vytvoril som trivialne dedikovane DI rozsirenie, pre referenciu ho sem pastujem:

<?php
class AliasDiExtension extends Nette\DI\CompilerExtension
{
	public function loadConfiguration()
	{
		$builder = $this->getContainerBuilder();
		foreach ((array) $this->config as $alias => $serviceName) {
			$builder->addAlias($alias, $serviceName);
		}
	}
}
?>

Takto je mozne vytvorit v neone konf s aliasmi:

<?php
alias:
	bar:		foo
	myAlias:	myService
?>

před 2 lety

dkorpar
Backer | 94
+
0
-

maybe moving this to cz part of forum?

před 2 lety

David Grudl
Nette Core | 7145
+
0
-

done