将应用程序的子目录添加到自动加载器

时间:2012-02-05 22:03:06

标签: php zend-framework

我的/ application文件夹下有一个名为“grids”的文件夹。现在我的类名是App_Grid_CustomGrid。如何在网格文件夹下自动加载这些类?我在Zend_Application之前尝试过index.php中的跟随代码。但它没有用。代码找不到CustomGrid类。

require_once 'Zend/Loader/Autoloader/Resource.php';

$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
        'basePath'  => APPLICATION_PATH,
        'namespace' => '',
));
$resourceLoader->addResourceType('grid', 'grids', 'Grid');

2 个答案:

答案 0 :(得分:2)

我在Bootstrap.ini中使用了以下方法来自动加载存储在我的应用程序根文件夹中的自定义类(根据您的需要进行自定义):

protected function _initNamespaces()
{        
    $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
        'basePath'  => APPLICATION_PATH,
        'namespace' => '',
        'resourceTypes' => array(
                'grid' => array(
                    'path'      => 'grids/',
                    'namespace' => 'Grid',
                ),
                'example' => array(
                    'path'      => 'example_folder/',
                    'namespace  => 'Example'
                )
    ));        
}

将名称空间留空可以让您从类名的开头省略App_。我单独执行此操作,我在Library文件夹中使用App_进行自定义类和插件。可以使用上面的方法加载多个名称空间,只需在resourcesType参数中添加其他数组。

应用程序结构如下所示:

|Project
    |-Application
        |-grids
            |-Test.php
        |-configs
        |-controllers
        |-models
        |-views
        |-Bootstrap.php
    |-Docs
    |-Library
    |-Public
    |-.zfproject.xml

Test.php看起来像这样:

<?php
class Grid_Test
{

    /**
     * Return sum of two variables
     *
     * @param  int $x
     * @param  int $y
     * @return array
     */
    public function add($x, $y)
    {
        return  $x + $y;
    }
}

答案 1 :(得分:1)

尝试:

$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
    'basePath'  => APPLICATION_PATH,
    'namespace' => 'App',
));
$resourceLoader->addResourceType('grid', 'grids/', 'Grid');

我认为它不起作用,因为它需要命名空间,因为它以App_为前缀,并且目录末尾没有尾部斜杠,所以它可能一直在寻找gridsCustomGrid.php同样。

相关问题