Esnek bir taban uygulaması oluşturmak için Zend Framework kullanmak

3 Cevap php

Biz Zend Framework kullanan bir e-ticaret platformu geliştiriyoruz. Biz aynı kod tabanını kullanan, uygulama up ve çalışan birçok örneği var. Yapılandırma ayarlar çeşitli dükkanlar ayırt etmek için kullanılır.

Karşı karşıya olduğumuz sorun, biz şimdi olduğu gibi genel platformu tutmak ve bunu uzatmak yerine yukarıda özetlenen yapılandırma yaklaşımı kullanmak istiyor. Genel platformu (veya temel uygulama) ortak denetleyicileri, modelleri ve görüşlerini içermelidir. Özel işlevselliği (kontrolörleri, modelleri ve görünümleri) örneğine özgü, ayrı bir uzantısı ve çekirdek platform takılı bir şekilde yer almalıdır. Bu şekilde, paylaşılan kod tabanı temiz ve şişkinlik üzerinde tutulur.

Kimse böyle bir yaklaşım ile herhangi bir deneyimi var mı? Etrafında en iyi yöntemler var mı?

Herhangi bir işaretçiler çok takdir edilmektedir!

3 Cevap

Benim ajansı son zamanlarda aynı sorunu bakarak oldum ve şu anda test ediyorum çözüm aşağıdaki app klasör yapısını içerir:

app/
    default/
            controllers/
            models, etc
    ecommerce/
              controllers/
              models, etc
lib/
    S24/
        ComponentCode.php
modules/
        ecommerce/
                  admin/
                        controllers/
                        models, etc
                  default/
                          controllers/
                          models, etc
data, public web, temp, other ZF folders

Fikir ortak bir bileşen kodu modüler uygulama modules ve bireysel müşteri web sitesi kodu app depolanır saklanır, lib depolanır olduğunu.

lib/S24 ve modules/ecommerce klasörler (bu klasörler harici SVN) her proje için ortak ve aynı olacaktır.

app bir modül dizin, yani default, ve ecommerce klasörleri ZF içerisindeki modülleri oluşturmak. app/default (yani hiçbir modülü) kontrolörleri varsayılan içindir. app/ecommerce sadece modules/ecommerce/default/controllers içinde kontrolörleri uzatmak denetleyicileri bir dizi içerecektir.

Daha sonra isterseniz app/ecommerce/controllers işlevselliğini genişletmek veya yeni işlevler ekleyebilirsiniz.

Biz modül yönetici sistem aynı tutmak ve aynı zamanda birden fazla yönetici sistemlerini desteklemek istiyorum beri (www.domain.com / admin / e-ticaret ve www.domain.com / admin / user gibi URL'ler) biz doğrudan modüler yönetici sisteme hizmet modules klasör. Herhangi bir özel yönetici sayfalar ardından app/admin/controllers eklenebilir.

// Add Controller folder
$front->addControllerDirectory('/path/to/modules/ecommerce/admin/controllers', 'ecommerceAdmin');

// Add route
$router->addRoute(
    'ecommerceAdmin',
    new Zend_Controller_Router_Route('admin/ecommerce/:controller/:action',
                                     array('module' => 'ecommerceAdmin', 
                                           'controller' => 'index',
                                           'action' => 'index'))
);

Ben şu anda bu test ediyorum söylüyorlar ama ben umut olarak kendi sistemi için bazı fikirler verir. Ben bu tamamen istikrarlı var sonra ben konu hakkında bir blog yazı yazmak istiyoruz.

Biz platform benzer sesler ve bizim durumumuzda tüm örnek veri örneğinin kendi veritabanında saklanan bir hizmet uygulaması gibi bir yazılımı çalıştırmak.

Tamamen ısmarlama ise özel işlevler (kod) ile ilgili gelince, o zaman ben modularise veya paketlemek özel kod müşterinin benzersiz bir tanımlayıcı tarafından başvurulan bir kap içine ve talep üzerine kodu yüklemek için mantıklı olur sanırım. Bu modüller için basit ama tek tek denetleyicileri hatta eylemleri istiyorsa tabii ki daha karmaşıktır.

Bazı sistemler bu kamu API'ler için daha yaygın olmasına rağmen işlevselliği, enjekte edilmesine izin kendi olay / geri arama sistemi kurmak.

EDIT: Ben çeşitli yorumların fark etmemişti. Yani özelleştirilmiş kod tek bir paket değildir, ve işlevsellik ekler ve geçersiz kılmaz.

Burada sorun, kod şey geçersiz kılmaz söz olduğunu, ancak oldukça işlevsellik ekler. Muhtemelen sınıf isimleri ile bir yapılandırma dosyası okumak istediğiniz bir eklenti sistemi, bir çeşit bakıyor olurdum. Bu sınıflar her eklenti (UI sekmeleri kullanır, yani bu sekmenin adı için bir özelliği olurdu) hakkında bilgi vermek istiyorum.

Gerçekten uygulama başına farklı işlevselliği ne tür bağlıdır. Bu yüksek düzey çözüm sağlamak için daha fazla bilgi sahibi olmak yararlı olabilir.

Ben PHP autoload kullanmak yolu (bkz: http://stackoverflow.com/questions/779123/how-does-oop-manage-to-include-classes-stored-in-different-files/787233#787233) sınıfı adına bağlı olarak ayrı klasörler oluşturur. Bu, diğer uygulamalardan kodunu ayıran yararlı olabilir.