Проблемы с настройкой Zend_Loader_Autoloader. Довольно простой вопрос, но я новичок в Zend Framework - PullRequest
0 голосов
/ 28 февраля 2010

Прочитайте комментарии в коде для описания:

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
public function __construct($configSection){
        $rootDir = dirname(dirname(__FILE__));
        define('ROOT_DIR',$rootDir);

        set_include_path(get_include_path()
        . PATH_SEPARATOR . ROOT_DIR . '/library/'
        . PATH_SEPARATOR . ROOT_DIR .
        'application/models'
        );

        //PROBLEM LIES HERE, BEWARE OF DRAGONS.
        //Using this, I receive a deprecated warning.
        include 'Zend/Loader.php';
        Zend_Loader::registerAutoload();        

        //Using this, I recieve an error that autoload() has missing arguments.     
        //Zend_Loader_Autoloader::autoload();       

        //Load the configuration file.
        Zend_Registry::set('configSection', $configSection);
        $config = new Zend_Config_Ini(ROOT_DIR . '/application/config.ini',$configSection);

        Zend_Registry::set('config',$config);
        date_default_timezone_set($config->date_default_timezone);

        //Database configuration settings go here. :)
        $db = Zend_Db::factory($config->db);
        Zend_Db_Table_Abstract::setDefaultAdapter($db);
        Zend_Registry::set('db',$db);
    }

    public function configureFrontController(){
        $frontController = Zend_Controller_Front::getInstance();
        $frontController->setControllerDirectory(ROOT_DIR . '/application/controllers');
    }

    public function runApp(){
        $this->configureFrontController();

        //Runs the Zend application. :)
        $frontController = Zend_Controller_Front::getInstance();
        $frontController->dispath();
    }
}

Я пытаюсь следовать руководству, в котором я хочу настроить приложение Zend на использование функций автозагрузки, которые оно предлагает.

При использовании метода registerAutoLoad () я получаю устаревшее предупреждение, и оно говорит мне использовать другой метод, тот, что ниже в моем коде.

Что я могу сделать?

Редактировать: Почему я использовал устаревший метод:

Один далеко не идеальный аспект загрузочный файл в оригинальном Hello Мир в том, что есть много Zend_Loader :: loadClass () вызывает для загрузки до классов, которые нам нужны, прежде чем мы используем их.

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

Для нашего сайта Places мы используем PHP __autoload (), чтобы PHP автоматически загружал наши классы для нас. PHP5 представил __autoload () магическая функция, которая вызывается всякий раз, когда вы пытаетесь создать экземпляр класс, который еще не был определен.

Класс Zend_Loader имеет специальный метод registerAutoload () специально для использования с __autoload (), как показано в листинг 3.1 б. Этот метод будет автоматически использовать PHP5 Standard PHP Библиотека (SPL) spl_autoload_register () функционировать так, чтобы несколько автозагрузчиков может быть использован.

После Zend_Loader :: registerAutoload () был вызван, когда класс экземпляр, который еще не был определен, файл, содержащий класс Включено. Это решает проблему беспорядка Zend_Loader :: loadClass () и гарантирует, что только необходимые файлы загружаются для любого данного запроса.

1 Ответ

5 голосов
/ 28 февраля 2010

Поскольку Автозагрузка была изменена в ZF1.8 , вы должны заменить

require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload();

с

require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();
$loader->registerNamespace('App_');

или используйте резервный автозагрузчик с

$loader->setFallbackAutoloader(true);
$loader->suppressNotFoundWarnings(false);

В зависимости от возраста вашего урока, я советую проверить урок для недавнего ZF1.10 в блоге Роба Аллена .

...