Zend Framework bağımlılık enjeksiyon nasıl kullanılır?

0 Cevap php

Şu anda Zend Framework öğrenmeye çalışıyorum ve bu nedenle ben kitabı "Eylem Zend Framework" aldım.

3. bölüm, bir temel modeli ve denetleyicisi ikisi için ünite testleri ile birlikte tanıtıldı. Temel denetleyicisi bu gibi görünüyor:

class IndexController extends Zend_Controller_Action 
{
    public function indexAction()
    {
        $this->view->title = 'Welcome';
        $placesFinder = new Places();
        $this->view->places = $placesFinder->fetchLatest();
    }
}

Places veritabanından son yerlere getirir modeli sınıftır. Burada ne hata bana: nasıl IndexController sınamak gerekir isolation? Places sınıfına referans "kodlanmış" olduğu gibi, ben herhangi taslakları enjekte veya IndexController içinde alay edemez.

Ne ben oldukça istiyorum böyle bir şey olur:

class IndexController extends Zend_Controller_Action 
{
    private $placesFinder;

    // Here I can inject anything: mock, stub, the real instance
    public function setPlacesFinder($places)
    {
        $this->placesFinder = $places;
    }

    public function indexAction()
    {
        $this->view->title = 'Welcome';
        $this->view->places = $this->placesFinder->fetchLatest();
    }
}

Ben haberi ilk kod örneği en kesinlikle IndexController izolasyon test edilemez gibi dost birim test değil. İkincisi çok daha iyidir. Şimdi sadece denetleyici nesneleri içine modeli örneklerini enjekte için bir yol gerekir.

Ben Zend Framework başına bağımlılık enjeksiyon için hiçbir bileşene sahip olduğunu biliyoruz. Ancak bazı iyi çerçeveler PHP için, herhangi bir birlikte Zend Framework ile kullanılabilir dışarı orada? Veya Zend Framework bunun için başka bir yolu var mı?

0 Cevap