Pracuję nad pakietem dla Laravel 5, a teraz muszę skorzystać z wtrysku zależności, aby uzyskać bardziej skalowalną i możliwą do ponownego wykorzystania aplikację, nie wiem, które podejście najlepiej zrobić i dlaczego, to jest kawałek mojego kodu i muszę wstrzykuje zależność Lang
klasyNajlepsze podejście do iniekcji Dependency w pakiecie Laravel 5
class MyController extends \App\Http\Controllers\Controller
{
public $text;
public $lang;
public function __construct()
{
// Some codes here
}
public function myFunction(){
$this->text = \Lang::get('package::all.text1');
}
}
W tym linkiem http://laravel.com/docs/4.2/ioc 2 podejście sugeruje, Basic Usage
i Automatic Resolution
na podstawie mojego zrozumienia z linkiem biorąc pierwszy podejście muszę dodać
App::bind('lang', function($app)
{
return new \Lang();
});
do części rejestru aplikacji, a następnie w funkcji Muszę coś tak:
public function myFunction()
{
$lang = \App::make('lang');
$this->text = $lang::get('package::all.text1');
}
Innym sposobem jest modyfikacja constructor
jak
public function __construct(Lang $lang)
{
$this->lang = $lang;
}
A potem instancję obiekt z klasy podobnej do
$myController = App::make('MyController');
Która droga jest lepsza sposób, aby wziąć pod uwagę, biorąc pod uwagę, że ten class
jest Controller
i będzie on wywoływany w pliku routes
, lub proszę mnie poprawić, jeśli moje zrozumienie z linku nie jest poprawne. proszę również poinformować mnie, dlaczego sugerujecie którekolwiek z tych podejść.
Sugerowałbym biorąc go jako argument konstruktora chyba znaleźć się po wiele zależności zewnętrzne (lang , żądanie, uri, router, poczta itd.). Alternatywnie użyj nowego [method dependency injection] (http://laravel.com/docs/5.0/controllers#dependency-injection-and-controllers) (przewiń w dół), jeśli metoda, której używasz, jest faktycznym działaniem kontrolera . – alexrussell
Wydaje się również, że Twój wpis nie zawiera właściwego linku, o którym wspomniałeś. – alexrussell
@alexrussell właśnie zredagował pytanie i dodał link: – Siavosh