Добавить подкаталог приложения в автозагрузчик - PullRequest
0 голосов
/ 06 февраля 2012

У меня в папке / application есть папка с именем "grid".Теперь мои имена классов - App_Grid_CustomGrid.Как я могу автозагрузить эти классы в папке сетки?Я пробовал следующий код в index.php до Zend_Application.Но это не сработало.Код не может найти класс 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 ]

2 голосов
/ 06 февраля 2012

Я использовал следующий метод в 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_ в начале имен ваших классов. Я делаю это отдельно, я использую 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 голос
/ 06 февраля 2012

Попробуйте:

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

Я думаю, что это не сработало, потому что ему нужно пространство имен, так как перед ним стоит префикс App_, а в конце каталога не было косой черты, поэтому, возможно, он также искал gridsCustomGrid.php.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...