Porównaj ceny domen i usług IT, sprzedawców z całego świata

Przekazywanie parametrów zależności do App :: make () lub App :: makeWith () w Laravel


Mam klasę, która używa zależności. Potrzebuję dynamicznie ustawiać parametry zależności kontrolera:
$objDependency = new MyDependency();
$objDependency->setSomething($something);
$objDependency->setSomethingElse($somethingElse);$objMyClass = new MyClass($objDependency);

Jak mogę to osiągnąć za pomocą kontenera usług w Laravel? Właśnie tego próbowałem, ale wydaje mi się to niewłaściwe. W moim roku AppServiceProvider:
$this->app->bind('MyClass', function($app,$parameters){ $objDependency = new MyDependency();
$objDependency->setSomething($parameters['something']);
$objDependency->setSomethingElse($parameters['somethingElse']); return new MyClass($objDependency);
}

A potem w kontrolerze użyłbym go tak:
$objMyClass = App:make('MyClass', [
'something' => $something,
'somethingElse' => $somethingElse
]);

Czy to jest poprawne? Czy jest lepszy sposób, aby to zrobić?
podziękować
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz zobaczyć szczegółową dokumentację tutaj:

https://laravel.com/docs/5.6/c ... ethod
https://laravel.com/docs/5.6/c ... ethod
Robi się to w następujący sposób:
$api = $this->app->makeWith('HelpSpot\API', ['id' => 1]);

Lub użyj aplikacji pomocniczej ()
$api = app()->makeWith(HelpSpot\API::class, ['id' => 1]);

Wysoko

ważny

ustaw klucz tablicy jako nazwę zmiennej argumentu, w przeciwnym razie zostanie zignorowany. Więc jeśli twój kod oczekuje zmiennej o nazwie $ modelData, klucz tablicy musi mieć wartość „modelData”.
$api = app()->makeWith(HelpSpot\API::class, ['modelData' => $modelData]);

Uwaga: jeśli używasz go do mockowania, makeWith nie zwraca instancji Mockery.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz to również zrobić w ten sposób:
$this->app->make(SomeClass::class, ["foo" => 'bar']);

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się