Zend bir BaseController ile IndexController genişletme

4 Cevap php

Ben gibi küresel ana kontrolöre ile benim denetleyicileri genişletmek çalışıyorum:

class BaseController extends Zend_Controller_Action {
 // common controller actions
    public function listAction() {
        // do stuff
    }
}

class IndexController extends BaseController {
 // index controller specific actions
}

class LoginController extends BaseController {
 // login controller specific actions
}

But I get this error: PHP Fatal error: Class 'BaseController' not found in /var/www/Zend/project/application/controllers/IndexController.php on line 3

Herhangi Bu denetleyici "görmek" için Zend almak nasıl bir fikir?

4 Cevap

the quick solution that does not take advantage of the autoloader functionality is to require_once '/path/to/BaseController.php' in the index-controller file.

Set-up varsa autocontroller, o zaman bulamıyorum, yani yanlış ne kontrol düşünmelisiniz. Önceki yaklaşımı deneyin ve sonuçları bilgilendirmek.

Autoloader

Kur autoloader ve böylece (sizin bootstrap.php include yolu ayarladıktan sonra) gibi otomatik yükleyici ile Zend kütüphane dışında olmalıdır kütüphane kayıt:

//AutoLoad loads classes automatically if they are used
require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();
$loader->registerNamespace('Mylibrary_');

Zend naming conventions

Aşağıdaki gibi Sonra BaseController adlandırmak gerekir

/Zend (folder)
/Mylibrary (folder)
    /Controller (folder)
        Action.php <-- this is your basecontroller file

ki şunları içerir:

class Mylibrary_Controller_Action extends Zend_Controller_Action
{
}

kontrolör klasörüne ve normal denetleyicileri:

class IndexController extends Mylibrary_Controller_Action
{
}

Eğer çerçeve genişletmek istediğiniz zaman, bu nedenle temelde kendi kütüphanesinde bir paralel yapısını korumak.

Ben, kendi kütüphanesinden içine ayrı yani dosya kütüphanesi / YourApp / Controller / action.php oluşturmak ve dolayısıyla bu isim olurdu YourApp_Controller_Action extends Zend_Controller_Action. Oradan onlar olmak ve onları lehine YourApp_Controller_Action uzatmak izin vermelisiniz denetleyicilerinin yerleştirmek olabilir Zend_Controller_Action.

Eğer kütüphane / Zend içinde değil, sadece bakmak için otomatik yükleyici güveniyor, ama aynı zamanda kütüphane / YourApp içinde gereken dosyayı bulmak için. Yani Lütfen bootstrap yılında set_include_path arayın.

Bu teknik ile size özel "basecontroller" değil, tüm kontrolörlerin devralmak için gereken yöntemleri şişirilmiş alabilirsiniz akılda tutmak gerekir.

Daha hızlı bir çözüm (ve kavramsal daha doğru) her :) en baz denetleyicileri oluşturmak için DEĞİLDİR

Ortak eylem var? Kullan action helpers. Sen autorun edilmesi gereken bazı özelliğe sahip? Kullan controller plugins.

Tasarım olarak ZF kontrolörleri mümkün olduğunca esnek ve miras yoluyla kendinizi sınırlayarak (ve onun getirdiği birleştirilmesi) sadece mümkün olan en iyi strateji değildir edilmiştir.