Zend Framework Dinamik Varsayılan Modülü

3 Cevap php

Herkes Zend Framework dinamik varsayılan modülünü ayarlamak ve değil ad sorunları çalıştırmak için bir yol biliyor mu? Örneğin, ne yapmak istediğiniz varsayılan modül olarak ayarlamak bunlardan biri ile, yüklenecek izin modülleri bir tablo var olduğunu. Örneğin, ben olabilir:

admin
blog
calendar

yüklenebilir modül olarak. Ben varsayılan modül olarak 'blog' varsa, o zaman 'admin' ve 'takvim' kendi kontrolörleri 'blog' while (Admin_IndexController, Calendar_IndexController) alanlı olması (IndexController) değildir.

Ben varsayılan modül olmak 'takvim' değiştirirseniz, ZF artık çünkü Namespacing sınıflarını bulabilirsiniz.

Bunu nasıl alabilirim? Şu anda aşağıdaki kodu kullanıyorum:

$modules = new Modules();
$activeModules = $modules->fetchActive();
foreach($activeModules as $mod) {
    $loadedModules[$mod->name] = '..application/modules/' . $mod->name . '/controllers';
    if($mod->default) {
        $defaultModule = $mod->name;
    }
}
$frontController->setControllerDirectory($loadedModules);
$frontController->setDefaultModule($defaultModule);

3 Cevap

Eğer varsayılan modülünü değiştirmeyi düşünüyorsanız, bu ALL modülleri namespace ve ardından varsayılan modül önüne gerektiğini belirtmek için muhtemelen en iyisidir:

İlk Namespacing kullanmak için "blog" modülünü değiştirin:

<?php

// Used to be "class IndexController"
class Blog_IndexController extends Zend_Controller_Action {

}

Ardından, çağrı setParam Zend_Controller_Front örneğine üzerine prefixDefaultModule seçeneği için:

<?php

    // Allow your default module to be prefixed
    $frontController->setParam('prefixDefaultModule', true);

Bir açıklama için bug # 1831 bakın.

You can make a default module actually be the deciding part in this whole process. More specifically - make all requests for default module go to a class that then will decide what specific module is currently default one and will re-route request to it.

En azından biz bunu uyguladık yolu ;)

Bir preDispatch Kontrol Plugin iş gibi geliyor.

Belirli bir istek ya da iletmek veya talep üzerine yönlendirmek için kimlik / session / bilinen verilere dayalı bir modül değiştirmek için isteği değiştirebilirsiniz.