wstrzykiwanie tylko 1 z 3 argumentów klasy.

Odpowiedz Nowy wątek
2019-06-06 11:29
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?

Pozostało 580 znaków

2019-06-06 11:59
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ąć?

Pozostało 580 znaków

2019-06-06 12:20
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.

edytowany 1x, ostatnio: Bibet, 2019-06-06 12:20

Pozostało 580 znaków

2019-06-06 12:30

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');
edytowany 1x, ostatnio: Desu, 2019-06-06 12:31

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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