2012-09-27 91 views
1

我將寫下一個簡單的示例來顯示我需要的內容,因爲經過3個小時的研究,我沒有找到類似的東西。更改某些前綴的Zend自動加載路徑

我有我的所有課程,從Project_開始。例如。 Project_BaseController是基礎控制器類。

BaseController.php位於/www/Core/(這是set_include_path中的路徑之一),但自動裝載機在/www/Core/Project/處搜索它。

我想的路徑設置爲/www/Core/Project_開始(後,它應該命名後找到的文件,如:Project_User => /www/Core/User.php)每類

也許Zend_Loader_Autoloader_Resource正是我需要的?

我懷疑它,因爲它是資源的不是全球配置種。

回答

1

您爲類命名的方法違反了ZF採用的PSR-0本金。你會更容易遵循PSR-0。在這種情況下,您唯一要做的就是將您的Project_類重新定位到Project目錄。

0

this answer中使用的方法可能有所幫助。自定義的自動加載器似乎是這裏的一種方式。 -

添加以下行的application.ini

autoloadernamespaces[] = "App_" 

調整這是符合你保持你的庫文件,我把礦library/App

需要在app /裝載機/自動加載磁帶機/ Project.php磁帶自動加載機是這樣的: -

class App_Loader_Autoloader_Project implements Zend_Loader_Autoloader_Interface 
{ 
    public function autoload($class) 
    { 
     $project = explode('_', $class); 
     if ($project[0] != 'Project'){ 
      return false; 
     } 
     $project[0] = '/www/core'; 
     require_once implode('/', $project) . '.php' 
     return $class; 
    } 
} 

初始化磁帶自動加載在你的引導: -

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initAutoloading() { 
     $autoloader = Zend_Loader_Autoloader::getInstance(); 
     $autoloader->pushAutoloader(new App_Loader_Autoloader_Project()); 
    } 
} 

很顯然,我沒有一個環境匹配你的,所以我無法測試這個。但是,我已經從我自己使用的自動加載器中調整了它,所以它應該沒有太多的調整。

我最初遇到這種技術感謝answer posted by David Weinraub,並發現它非常有用,因爲。

說了這麼多,akond's answer是很好的建議,將是首選;與框架一起工作,而不是反對它。我提供這個答案的情況下,不適合你的選擇。