2015-11-10 24 views
5

mam wymowny model zwany powierzchnię, która jest zależna od ZipCodeRepository obiektu:Laravel5 wtrysku zależności od modelu

class Surface extends Model{ 
    public function __construct(ZipCodeRepositoryInterface $zipCode){...} 

i obiekt adres że powierzchnie hasMany.

class Address extends Model{ 
    public surfaces() { return $this->hasMany('App/Surface'); } 
} 

Mój problem jest, gdy zadzwonię $address->surfaces pojawia się następujący błąd:

Argument 1 passed to App\Surface::__construct() must be an instance of App\Repositories\ZipCodeRepositoryInterface, none given 

Myślałem MKOl będzie automatycznie wstrzyknąć to.

+0

Zobacz tutaj: https://stackoverflow.com/questions/22338161/cant-pass-class-instance-to-constructor/22338753 ... szczególnie problem otwarty na github – svrnm

Odpowiedz

12

Dzięki @svmm do odniesienia the question mentioned in the comments. Zauważyłem, że nie można użyć wtrysku zależności w modelach, ponieważ trzeba by było zmienić sygnaturę konstruktora, która nie działa z frameworkiem Eloquent.

co zrobiłem jako etap pośredni, podczas refaktoryzacji kodu, to użyć App::make w konstruktorze do utworzenia obiektu, takich jak:

class Surface extends Model{ 
    public function __construct() 
    { 
     $this->zipCode = App::make('App\Repositories\ZipCodeRepositoryInterface'); 
    } 

tamtędy MKOl nadal będzie chwycić realizowany repozytorium. Robię to tylko, dopóki nie będę mógł pobrać funkcji do repozytorium, aby usunąć zależność.

+0

Dziękujemy! Podczas przekazywania zależności do konstruktora Model otrzymywałem błąd "zbyt mało argumentów" podczas wykonywania Eloquent find (id). Ta metoda działa znacznie lepiej – Stetzon