Zend Framework Modelleri autoloader tarafından yüklenmiyor

2 Cevap php

Ben Zend_Application ile kurulum benim uygulama var. Benim bootstrap.php wich bir _initAutoload() yöntem bu gibi görünüyor var:

 public function _initAutoload(){
     $this->bootstrap("frontController");
     $front = $this->frontController;

     $autoloader = Zend_Loader_Autoloader::getInstance();

     $autoloader->registerNamespace('Client_');
     $autoloader->registerNamespace('Frontend_');
     $autoloader->registerNamespace('Global_');
     $autoloader->registerNamespace('Global_Helper_');
     $autoloader->setFallbackAutoloader(true);

     $modules = $front->getControllerDirectory();
     $default = $front->getDefaultModule();

     foreach (array_keys($modules) as $module) {
         if ($module === $default) {
             continue;
         }

         $autoloader->pushAutoloader(new Zend_Application_Module_Autoloader(array(  
             "namespace" => ucwords($module),
             "basePath" => $front->getModuleDirectory($module),
         )));

     }

     return $autoloader;  
 }

Ben default modülü de (bana daha mantıklı görünüyor) $front->setParam("prefixDefaultModule", true) öneki kurulum FrontController var

Ben her zamanki dizin yapısı var.

The problem:

Ben var her modül için alt etki alanlarını kurdum. Herşey fine ana main alanı (www) çalışır. Ana modül frontend. Önyüz Varsayılan modül ise şeyler :) çalışır. Tamam. Şimdi. Her alt alan adı için, ben aynı index.php var ama gidecekseniz env değerini değiştirdi. client, env değeri alt etki alanı için client vb env değeri olan her zaman application.xml bölümüne karşılık gelir. Her Application.xml subdomain bölüm (istemci, api, vb) defaults (şu anda öyle her alt alan test ve test varsayılan extends, vb hataları sağlayan da bir test bölümü gidecekseniz) denir ana bölümü uzatmak.

Application.xml ve Each subdomain bölümü default modül adını değiştirir. Bölüm varsayılan için önyüz, bölüm istemci kendi müşteri için, vs Yani

Now
When I access domain.com/client or domain.com/api - its fine. Both API & Client use Client_Model_NameOfTheModel and like it supposed to - it's located application/modules/client/models/NameOfTheModel.php and the DbTable/NameOfTheModel.php WORKS

BUT When I access the the module from its respective subdomain (client.domain.com, api.domain.com, etc) and the default module has been changed from frontend to its respective subdomain module name - it ends working. It even doesn't output that "stack trace".

Uyarı: on line [iste-benim-yolu-to-root] / library / Zend / Loader.php böyle bir dosya ya da dizin yok: failed to open stream: (Client / Model / ContactLists.php) [function.include] içerir 136

Warning: include () [function.include]: eklenmek üzere 'Müşteri / Model / ContactLists.php' (include_pathdaki = '[iste-my-yolu-to-root] / kütüphane açma başarısız:. :/ Usr / lib / php :/ satırda [iste-benim-yolu-to-root] / library / Zend / Loader.php usr / local / lib / php ') 136

Ölümcül hata: Sınıf 'Client_Model_ContactLists' satırında 4 [iste-benim-yolu-to-root] / application / modules / client / kontrolörleri / ContactListsController.php bulunamadı

Ben bu çalışma almak için 2 gün denedim. Bu sadece değil. Sadece varsayılan etki altında çalışır ve Application.xml onun alt alan adı için varsayılan modülü değiştirir değil zaman. Bunun gibi. Ben devam edemiyor ve bu uygulamayı bu hafta sonuna kadar (erken beta) sandbox dışında olması gerekir, çünkü bu nokta şu anda çok çok önemlidir.

Thanks for anyone for some advice.
PS. Sorry for the poor English. It isn't my native tongue

2 Cevap

Bu sadece bir üstünkörü tahmin olduğunu, ancak çünkü bu satırların varsayılan üzerinde çalışıyor olabilir gibi görünüyor:

 $autoloader->setFallbackAutoloader(true);

 $modules = $front->getControllerDirectory();
 $default = $front->getDefaultModule();

 foreach (array_keys($modules) as $module) {
     if ($module === $default) {
         continue;
     }

Sizin modül varsayılan modül ise Esasen, onu geri i zannedebilir dönüş Robotuna düşüyor demektir ki, bu da atlar ve varsayılan autoloader Modelleri bulamıyorsanız, iyi sorunu gidecekseniz. Hata kök yolun concatı ve onun doğru yüklemeye çalışırken sınıfın yolunu mi?

Yanlış olabilir gibi de, bu görünüyor

         "namespace" => ucwords($module),

Ben olması gerekir düşünürdüm

         "namespace" => ucwords($module) . "_",

Lütfen başka ad gibi.

Eğer ZF hangi sürümünü kullanıyorsunuz?

1.10 sürümü - Bir sonraki 1.8 kullanıyor musunuz?

Eğer öyleyse, bir modül için Zend_Application de kaynak kullanarak olmalıdır. Bu modüller altında vb formları, modelleri, yardımcıları, için autoloading kurar.

Bir application.ini kullanıyorsanız, her modül için böyle bir satır olması gerekir:

resources.modules.module_name = "etkin"

http://framework.zend.com/manual/en/zend.application.available-resources.html#zend.application.available-resources.modules