Как автоматически загружать классы в Zend Framework - PullRequest
0 голосов
/ 08 сентября 2011

Я увлекаюсь фреймворком Zend, и у меня есть несколько вещей, которые работают, но некоторые другие вещи кажутся более тяжелой работой.

Сейчас я отредактировал свой файл php.ini так, чтобы он шел по пути Zend, который работает нормально, однако мой вопрос заключается в том, чтобы создать, например, форму, мне действительно нужно require каждый путь.

Например:

    require_once('Zend/Form.php');
require_once('Zend/Form/Element.php');
require_once('Zend/Form/Exception.php');
require_once('Zend/Form/Element/Text.php');

Я что-то упускаю?

Привет

Ответы [ 2 ]

4 голосов
/ 08 сентября 2011

Вам не хватает всего в Zend_Autoloader.1 сек, и я возьму несколько ссылок и примеров.

http://zendframework.com/manual/1.11/en/learning.autoloading.usage.html

ОК, так что вы обычно настраиваете свой автозагрузчик в загрузчике приложений

<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initDoctype()
    {
        $this->bootstrap('view');
        $view = $this->getResource('view');
        $view->doctype('XHTML1_STRICT');
    }

    protected function _initAutoload()
    {
        $auto_loader = Zend_Loader_Autoloader::getInstance();

        $resource_loader = new Zend_Loader_Autoloader_Resource(
            array(
                'basePath'       => APPLICATION_PATH,
                'namespace'      => '',
                'resourceTypes'  => array(
                    'my'   => array(
                        'path'      => '/../library/My/',
                        'namespace' => 'My_'
                    ),
                )
            )
        );

        return $auto_loader;
    }

    ... MORE FUNCTIONS
}

Так что установитедо базового автозагрузчика и автозагрузчика для другой библиотеки, которую я написал (в основном это пользовательские валидаторы и тому подобное, называемые «My»), которые существуют рядом с библиотеками Zend

Затем в каждом из ваших модулей есть файл начальной загрузки:

<?php
class Default_Bootstrap extends Zend_Application_Module_Bootstrap
{

}

В нем не должно быть ничего, загрузчик родительского модуля устанавливает автозагрузку для этого модуля

И последнее, в вашем webroot есть индекс.php-файл, который передает все запросы вашему приложению. Убедитесь, что вы добавляете библиотеку в путь включения php.

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'),
    get_include_path(),
)));
0 голосов
/ 08 сентября 2011

Вы должны использовать автозагрузчик.Вы можете использовать каждый компонент отдельно.Вы не обязаны использовать весь поток диспетчеризации MVC Zend Framework, однако, если вы это сделаете, вам следует настроить свои собственные пространства имен и настроить автозагрузчик.

Когда вы делаете это, каждый раз, когда вы используете класс, который еще не существует, он будет требовать его для вас.

Вот документы:

http://framework.zend.com/manual/en/zend.loader.autoloader.html

Все, что вам нужно сделать, это установить путь к вашей библиотеке ZF.

...