Daha modülleri ile Zend Framework + Doctrine1.2 proje yapısı

Uygulamalar ZendFramework + Doctrine 1.2 ile bir süredir gerçekleştirildi, ancak şimdi daha fazla modül kullanımı ile ilk deneyimleri var. Belirli bir düzen ve farklı bir düzeni olan bir yönetici modülüne sahip herkes için varsayılan bir modül görülebilmesini istedim.

Şimdiye kadar benim uygulamalarımda her zaman aşağıdaki yapıyı kullandım:

/app
    /application
        /acls
        /configs
        /controllers
        /forms
        /layouts
        /models --> models by doctrine
            /generated --> base models by doctrine
        /plugins
        /views
        /Bootstrap.php
    /data
    /doctrine
        /data
        /migrations
        /schema
            /schema.yml
        /doctrine.php
    /library
    /public
    /tests

Yani sorum şu: Uygulamamın yapısı gerekenleri nasıl yapmalı?

Zend aracını kullanmayı denedim ve nasıl bir yapı oluşturduğumu görün:

zf create module admin

kurstan sonra kurs

zf create project app

Oluşturma komut modülünün application içinde bir modules klasörü oluşturduğunu fark ettim. modules 'a ve admin ' a girdi ve içinde kontrolörler , modeller ve görünümler oluşturdu.

Yani ayırma araçlarına ek olarak zf denetleyici ve doğru görüntüleme, ancak aynı zamanda modelleri. Ama doktrinim bir yandan bütün modelleri yaratıyor! : D

Her modül için doktrin tarafından oluşturulan şablonları kullanmak için nasıl yapabilirim?

Sonra yönetici modülü için nasıl yeni bir düzen atarım?

Parti konuğu için şu anda kullandığınız ya da bir kodu varsayılan şeklinde taşıdığınız tesisi terk etmemi öneriyorsunuz?

Üzgünüm, çok fazla soru, belki çok fazla şey yaptım, ama gerçekten çok kafam karıştı!

Teşekkürler

2

1 cevap

Tam bir dokümantasyondan sonra doğru proje yapısını buldum

/app
/application
    /acls
    /configs
        application.ini
    /layouts
        /scripts
            admin.phtml
            default.phtml
    /models --> models by doctrine
        /generated --> base models by doctrine
    /modules
        /admin
            /controllers
            /forms
            /view
        /default
            /controllers
            /forms
            /view
    /plugins
    /Bootstrap.php
/data
/doctrine
    /data
    /migrations
    /schema
        /schema.yml
    /doctrine.php
/library
/public
/tests

Modülünüzün bulunduğu yere göre farklı bir düzeni görüntülemek için aşağıdaki eklentileri kullandım:

class Plugin_Layout extends Zend_Controller_Plugin_Abstract
{
    /**
     * Called before an action is dispatched by Zend_Controller_Dispatcher.
     *
     * @param  Zend_Controller_Request_Abstract $request
     * @return void
     */
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        $layout = Zend_Layout::getMvcInstance();
        $module = $request->getModuleName();
        switch ($module) {
            case 'default':
                $layout->setLayout('default');
                break;
            case 'admin':
                $layout->setLayout('admin');
                break;
            default:
                $layout->setLayout('default');
                break;
        }
    }
}

Bootstrap.php dosyasına

 /**
 * @return Zend_Application_Module_Autoloader
 */
protected function _initAutoload()
{
    $autoloader = new Zend_Application_Module_Autoloader(array('namespace' => '', 'basePath' => APPLICATION_PATH));
    $autoloader->addResourceType('plugin', 'plugins', 'Plugin');
    return $autoloader;
}

application.ini dosyasına

resources.frontController.plugins.auth = Plugin_Layout
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"

Yukarıda kullanılan modüle göre açıklanan eklenti, düzeni "düzenler/komut dosyaları" içinde module.phtml adıyla ayarlayacaktır.


Bir modül içindeki formları otomatik yükleme

Aşağıdaki iki satırı uygulama.ini dosyanıza ekleyin

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[] = ""

Her modül için bir boostrap dosyası oluşturun. Bootstrap.php adlı dosya, modül dizininin köküne yerleştirilmeli ve sınıf adı {module name} _Boostrap olmalıdır. Bu önyükleme dosyası, yeni form dizinini otomatik yükleyiciye otomatik olarak eklemek için zend çerçevesine neden olacaktır.

class Admin_Bootstrap extends Zend_Application_Module_Bootstrap {}

/ Forms dizinine form sınıfı ekleyin. Bir giriş formu, Login.php dosyasının bir dosya adı ve {module name} _Form_Login sınıf adı olacaktır.

class Admin_Form_Login extends Zend_Form

Formunuzu aynı modülün içinden bir denetleyici dosyasından arayın.

$form = new Admin_Form_Login();

Basit ve etkili! ;)

3
katma
Cevabınızı daha açık hale getirmek için çözümünüzü de yanıtınızı kabul edin!
katma yazar Kees Schepers, kaynak
Hayır doğru olanı yaptın ama kabul ettiğin gibi cevap verecektim :)
katma yazar Kees Schepers, kaynak
Emin değilim, ama bunu tavsiye eden daha fazla insan gördüm ve bunu yapmasına izin verildiğini veya önerildiğini düşünün. Şunu kontrol edin: blog.stackoverflow.com/2009/01/accept-your-own-answers
katma yazar Kees Schepers, kaynak
@KeesSchepers tam olarak ne yaptığımı. Birkaç gün sonra hiçbir cevap almadım ve daha sonra cevapları başka bir yerde buldum. Sonra bir cevap olarak yazmayı düşündüm, böylece daha sonra birine hizmet edebilirdi. Ben hatalıydım?
katma yazar JellyBelly, kaynak
@KeesSchepers: Yapabilir miyim? Kurallara aykırı mı?
katma yazar JellyBelly, kaynak
@KeesSchepers: teşekkürler! ;)
katma yazar JellyBelly, kaynak
@KeesSchepers: lütfen cevabımı oylayın?
katma yazar JellyBelly, kaynak