Hizmet yöneticimi varlık sınıfımda kullanmaya çalışıyorum ancak bunu yapmanın en iyi yolunu bilmiyorum.ServiceManager'ı Model Sınıfında kullanmanın en iyi yolu?
Bir denetleyici üzerinde kolay çünkü servis yöneticisini şu numaradan arayabiliriz: $ this-> getServiceLocator();
Yani en iyi yolu nedir: benim varlık sınıf hizmet yöneticisi ile demiyorlar çünkü
Ama benim varlık sınıfında, ben ServiceLocatorAwareInterface uygular bile ı ServiceManager retieve olabilir
1 - Benim varlık sınıfımdaki denetleyici 'dan ServiceManager'ı geçin 2 - Benim varlık sınıfım 3 - ...?
iyi sorunumu anlamak için, bu işe yaramazsa benim kod:
Benim varlık sınıfı:
class Demande extends ArraySerializable implements InputFilterAwareInterface {
/../
public function getUserTable() {
if (! $this->userTable) {
$sm = $this->getServiceLocator();//<== doesn't work !
$this->userTable = $sm->get ('Application\Model\UserTable');
}
return $this->userTable;
}
Çok faydalı cevap! ServiceManager'ı modele enjekte etmemek için başka bir neden de bu şekilde, bizim nesneyimizi serileştiremeyiz (ServiceManager üzerindeki kapaklar nedeniyle). Ve böylece modelleri oturumda kaydedemiyoruz. –
Eklenmesi gereken tek şey, "Kapatma" çok fazla kullanmamanız gerektiğidir. Bunun yerine fabrika sınıflarını yaz. Bu, genel performansın artacağı gibi, sınıflar sadece talep üzerine oluşturulacaktır. Tüm Kapanışlar her bir istekte başlatılacaktır. – Sam
Bir şey daha: Eğer bazı bağımlılıklar kesinlikle ** gerekli ise ** '__construct()' ya da Setter-Injection – Sam