2011-07-21 21 views
0

ZF穿着我很瘦。我不能讓磁帶自動加載一個實例,而無需首先使用此將其添加爲一個資源Zend Framework:需要自動加載IIS7幫助

require_once ('Zend\Loader\Autoloader.php'); 
Zend_Loader_Autoloader::getInstance(); 

$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
      'basePath' => APPLICATION_PATH . '/helpers', 
      'namespace' => 'Application_', 
     )); 

$resourceLoader->addResourceType('form', 'forms/', 'Form') 
      ->addResourceType('functions', 'functions/', 'Functions') 
      ->addResourceType('menus', 'menus/', 'Menu') 
      ->addResourceType('acls', 'acls/', 'Acls'); 

現在我試圖加載插件,但ZF抱怨的路徑,當我知道存在這些文件的工作。

// located in application/controllers/plugins 
    require('controllers\plugins\Acl.php'); 
    $front = Zend_Controller_Front::getInstance(); 
    $front->registerPlugin(new Application_Controller_Plugin_Acl($acl)); 

爲什麼我必須使用require這是一個IIS7的東西嗎?我認爲AutoLoader應該處理所有事情。

回答

2

我不認爲這是一個IIS問題。我認爲這是對Zend_Loader_Autoloader_Resource的不當使用。

您在通過Zend_Loader_Autoloader_Resource告訴自動裝載機添加命名空間Application並且它位於基本路徑APPLICATION_PATH . '/helpers'中。

由此看來,如果我嘗試:

new Application_Menu_Primary(); 

ZF應該發現它在APPLICATION_PATH . '/helpers/menus/Primary.php'。那真的是你想要找到文件的地方嗎?我猜不是。此外,試試這個:Application_Controller_Plugin_Acl將永遠不會被包括在內,因爲你錯過了資源類型Controller_Plugin,它的目錄在APPLICATION_PATH . '/helpers'(我懷疑你想要的)。

我建議你刪除的Zend_Loader_Autoloader_Resource這種用法都在一起,並添加您的命名空間到你的應用程序的/library目錄並創建以下目錄結構:

/library/Application/Controller/Plugin/Acl.php 
/library/Application/Form/ 
...etc 

然後,你需要/library路徑添加到您的PHP include_path通過index.php。 (我認爲這是標準)

set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'), 
    get_include_path(), 
))); 

最後,Application命名空間添加到您的application.ini

autoloaderNamespaces.app = 'Application' 

這應該清理你的問題。我建議你更多地瞭解這門課Zend_Loader_Autoloader_Resource的目的。

+0

哇!布雷迪謝謝!我使用Zend Tool來創建項目,所以有很多我不知道如何設置結構。這真的有幫助。我一到火車就去試試。 –