2010-03-22 84 views
6

我有一個ZF 1.10應用程序中的自定義類的文件夾。該文件夾位於/庫中。我怎麼能告訴ZF他們在哪裏? application.ini和index.php都設置了庫的路徑,但ZF無法找到這些文件。如何指示我的自定義類的zend框架

謝謝

回答

8

有很多可能的解決方案。最常見的,使用Zend應用時,是通過將註冊在application.ini命名空間:

autoloaderNamespaces[] = "Example_" 

其他的解決方案:

  • 添加您的目錄到include_path使用set_include_path()(臨時解決方案)
  • 遵循PEAR命名約定(因此可以解析路徑)

在中設置自動裝載機0:

protected function _initAutoloader() 
{ 
    $autoloader = Zend_Loader_Autoloader::getInstance(); 
    $autoloader->registerNamespace("Example"); // or Example_ 
} 

最終,建立模塊或resource autoloader,例如,

$resourceLoader->addResourceTypes(array(
    'acl' => array(
     'path'  => 'acls/', 
     'namespace' => 'Acl', 
    ), 
    'example' => array(
     'path'  => 'examples/', 
     'namespace' => 'Example', 
    ),   
)); 
+0

謝謝takehin,它工作! 「$ autoloader-> registerNamespace(..」dit it! – curro 2010-03-22 23:01:01

+0

嗨,漂亮的老帖子問這個問題,但你仍然可以幫助我嗎?'Zend(1.12)'我有一個Directory'Example'和一個類'Example_Test ''直接在'Example'下面,我註冊了一個命名空間'Example',然後當我在我的'php'代碼中訪問類Example_Test'時,我可以毫無問題地做到這一點,但是當我查看getClassPath()在'Zend_Loader_Autoloader_Resource'裏面,它沒有返回一個有效的路徑(一些條件),所以這意味着這個文件不會被'autoload()'方法加載,那麼它是如何實際加載的? – 2017-07-19 06:09:25

1

退房this older Zend Framework tutorial from Rob Allen,4頁專門對,他談到了引導程序。他的新教程儘管非常出色,但似乎依賴於Zend Tool來創建應用程序並對其進行研究。

然而,有一件事令我震驚,那就是你提到你試圖包含的文件夾是public/library。除非你有意與世界分享你的代碼,否則我強烈建議你將它放在其他地方......除非你有一個不同的「公共」文件夾而不是與公衆分享(在這種情況下你可能需要考慮重命名它以避免將來的混淆)。

+0

謝謝你,卡爾。對不起,我沒有公共目錄中的圖書館。這只是一個錯誤。它位於「根」目錄中。 – curro 2010-03-22 21:09:31

+0

Rob Allen教程依賴於ZF 1.5。我使用的版本是1.10。儘管它創建了一個Bootstrap文件,但Bootstrap類是空的。一切工作正常,除了自定義類。我在另一個地方有ZF庫,並有PHP包含路徑指向它。 – curro 2010-03-22 21:16:57

+0

它的肉和土豆應該是set_include_path,我認爲你至少可以把它放在空的bootstrap類中。此外,羅布在他的網站上更新了教程1.10。 – 2010-03-22 21:25:26

24

我們經常會遇到編寫我們自己的自定義函數或類以及放置它們的問題。

因此,要添加自定義類(或自定義庫),可以使用zend框架的自動加載器命名空間。

添加以下行的application.ini文件

autoloaderNamespaces.custom = "Custom_" 

OR

autoloaderNamespaces[] = "Custom_" 

所有自定義類圖書館目錄下保存。在庫目錄中創建一個文件夾名稱'Custom'(在application.ini中定義)。

班會以「Custom_」在聲明文件(例如Custom_Test)的前綴

現在我們可以使用這個類爲$test = new Custom_Test(),在我們的應用程序。

+0

對於那些正在查看我認爲這種方法比接受的答案更受歡迎 – 2011-10-22 12:58:59

+0

我同意Angl.King.47和Muhammad Yaseen - 根據我自己的經驗,這是一種更簡單,更高效的方式來包含自己的類庫另外,zend中的標準index.php將包含li bra包目錄在PHP include路徑中。 – 2011-11-17 09:59:33

0

將您的自定義庫添加到作曲家。JSON:

"autoload": { 
"psr-0": {"Your": "vendor/My/library"} 
}, 

和運行作曲家更新