wstrzykiwanie tylko 1 z 3 argumentów klasy.

0

Siemka,
Jest możliwe zrobienie czegoś takiego, żeby wstrzykiwać jeden serwis który jest jednym z trzech argumentów klasy, tak żeby podczas tworzenia obiektu klasy nie trzeba było go podawać?

JakasKlasa($arg1, $arg2, $arg3)
{

}

I chce zrobic zeby arg1 i arg2 był podawany a arg3 był skonfigurowany w konfiguracji DI

NamespaceKlase\JakasKlasa:
    arguments:
        $arg3: '@jakisSerwis'

Tak jak wyżej próbowałem i nie działa, jest to w ogóle możliwe?

0
  1. Co to znaczy arg1 i arg2 był podawany?
  2. Możliwe, że mamy do czynienia z problemem X/Y - co próbujesz osiągnąć?
0
Patryk27 napisał(a):
  1. Co to znaczy arg1 i arg2 był podawany?

W momencie w którym tworze sobie obiekt tej klasy

$test = new JakasKlasa('bla', 'bla2')

chce żeby ten obiekt mi się stworzył bez podawania tego trzeciego argumentu - żeby ten argument był brany z konfiguracji.
A pierwsze dwa, żeby były wymagana - w sensie poleci wyjątek kiedy ktoś ich nie poda.

Patryk27 napisał(a):
  1. Możliwe, że mamy do czynienia z problemem X/Y - co próbujesz osiągnąć?

W sumie to tylko ciekawość, problem rozwiązałem inaczej ale jestem po prostu ciekaw czy jest to możliwe do zrobienia tak jak napisałem wyżej.

2

Tak się nie da, chyba że używasz dependency injection. Możesz użyć wzorca fabryki:

final class JakasKlasaFactory
{
	private $arg3;

	public function __construct($arg3)
	{
		$this->arg3 = $arg3;
	}

	public function create($arg1, $arg2): JakasKlasa
	{
		return new JakasKlasa($arg1, $arg2, $arg3);
	}
}

W symfony to może wyglądać jakoś tak (chociaż lepiej jak użyjesz constructor injection, nawet do controllerów można)

$jakasKlasa = $this->getContainer()->get('jakas_klasa_factory')->create('bla', 'bla');

1 użytkowników online, w tym zalogowanych: 0, gości: 1