Zend çerçevesinde diğer kontrolörünün üye işlevi çağıran?

3 Cevap php

O zaman nasıl evet ise, Zend Framework başka kontrolörünün üye işlevini çağırmak mümkün mü?

<?php
class FirstController extends Zend_Controller_Action {
    public function indexAction() {
         // general action 
    }   

    public function memberFunction() {
         // a resuable function
    }
}

Burada başka bir denetleyici bulunuyor

<?php
class SecondController extends Zend_Controller_Action {
    public indexAction() {
         // here i need to call memberFunction() of FirstController
    }
}

I ikinci kontrolörün MemberFunction () erişebilirsiniz nasıl izah ediniz.

Solution

Daha iyi bir fikir AppController tanımlamak ve daha fazla Zend_Controller_Action uzanır AppController genişletmek için tüm olağan kontrolörleri yapmaktır.

class AppController extends Zend_Controller_Action {
    public function memberFunction() {
         // a resuable function
    }
}

class FirstController extends AppController {
    public function indexAction() {
         // call function from any child class
         $this->memberFunction();
    } 
}

Şimdi memberFunction basit miras bir kural olarak AppController uzanan denetleyicileri çağrılabilir.

3 Cevap

Kontrolörler bu şekilde kullanılmak üzere tasarlanmamıştır. Bir action diğer kontrolörün yürütmek istiyorsanız after mevcut kontrolörü, _forward() yöntemi kullanın:

// Invokes SecondController::otherActionAction() after the current action has been finished.
$this->_forward('other-action', 'second');

Not action methods ("memberAction") için bu sadece çalışır, keyfi değil üye fonksiyonlar!

SecondController::memberFunction() birden denetleyiciler genelinde ihtiyaç duyulan bir şey yaparsa hem denetleyicileri birbirine bağımlı kalmadan paylaşılan işlevselliği erişebilir, böylece, bir eylem yardımcı veya kitaplık sınıfta bu kodu koymak.

Bunu gerek iki denetleyicileri denilen böylece bir eylem yardımcısı içine veya modeline kodunu faktoring düşünmelisiniz.

Selamlar,

Rob ...

Ben kuru takip ve ortak kütüphane yere bu işlevleri taşımak için öneririm. Örneğin kütüphane klasöründe oluşturmak

My/Util/ 

ve dosya

CommonFunctions.php

sonra sınıf aramak

My_Util_CommonFunctions

ve yöntemlerini tanımlamak

Şimdi kayıt var yeni ad kullanarak kodunda herhangi bir yerden onları arayabilirsiniz.

$loader = Zend_Loader_Autoloader::getInstance();
$loader->registerNamespace(array('My_'));

herhangi bir kontrol size kullanarak özel yöntemler çağırabilirsiniz:

My_Util_CustomFunctions::yourCustomMethod($params);