2011-06-07 97 views
0

如何自動加載模塊路徑上自定義目錄中的類。我的應用程序的結構就像下面在zend框架中自動加載

application 
|_ modules 
    |_admin 
    |_api 
    | |_Core.php 
    |_elements 
     |_Dialog.php 

我有兩個自定義目錄,「API」和「元素」,當我實例化兩個班我收到錯誤信息的對象:「致命錯誤類Admin_Api_Core未找到」。我嘗試用registerNamespace,但它不是在所有的工作

Zend_Loader_Autoloader::getInstance()->registerNamespace('Admin_'); 

回答

1

您可以配置Module_Bootstrap內自動加載(幾乎與本傑明克雷默的答案相同,但模塊基礎相同d)。 要做到這一點 - 在創建文件bootstrap.php中/用下面的內容模塊/ admin文件夾:

class Admin_Bootstrap extends Zend_Application_Module_Bootstrap 
{ 

    protected function _initAutoload() 
    { 
     $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
      'basePath'  => realpath(dirname(__FILE__)), 
      'namespace'  => 'Admin', 
      'resourceTypes' => array(
       'api' => array(
        'path'  => 'api/', 
        'namespace' => 'Api' 
       ) 
      ) 
     )); 

     $autoloader = new Zend_Application_Module_Autoloader(array(
      'namespace' => 'Admin', 
      'basePath' => dirname(__FILE__), 
      'resourceloader' => $resourceLoader 
     )); 
     return $autoloader; 
    } 

} 

之後,你就可以實例化類Admin_Api_Core等。(你應該指定所有resoursTypes)。如果你有很多模塊,你可以爲它們創建這樣的引導程序。

+0

非常好,這項工作!非常感謝你ischenkodv < - 你的名字很難拼寫:-d – brian 2011-06-08 23:53:55

3

看一看ZFS Resource Autoloaders

以下添加到您的bootstrap.php

protected function _resourceLoader() 
{ 
    $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
     'basePath'  => 'APPLICATION_PATH', 
     'namespace'  => '', 
     'resourceTypes' => array(
      'acl' => array(
       'path'  => 'api/', 
       'namespace' => 'Acl', 
      ), 
      'form' => array(
       'path'  => 'elements/', 
       'namespace' => 'Element', 
      ), 
     ), 
    )); 
} 

Api_Core負載APPLICATION_PATH . '/api/Core.php
Element_Core負載APPLICATION_PATH . '/elements/Core.php
Admin_Api_Core負載APPLICATION_PATH . '/modules/admin/api/Core.php
Admin_Element_Core負載APPLICATION_PATH . '/modules/admin/elements/Core.php

+0

根本不起作用,默認的basepath不是管理模塊,而是另一個模塊,如果我推動將默認設置爲管理是的,它的工作原理,但如果我設置爲另一個它不工作 – brian 2011-06-07 13:49:20

+0

感謝您的快速回複本:-) – brian 2011-06-07 13:50:01