Отключить автозагрузчик Zend - PullRequest
0 голосов
/ 08 января 2010

Как отключить Zend_Loader_Autoloader?

Ответы [ 6 ]

3 голосов
/ 17 января 2010

Если вы используете Zend_Application, в вашем index.php после создания экземпляра ZA вы можете получить / установить автозагрузчик, который вы хотите использовать ZF:

$app = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/configs/config.ini');
$app->getAutoloader()->setDefaultAutoloader('yourAutoloader');
$app->bootstrap()->run();

НТН

3 голосов
/ 16 января 2010

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

spl_autoload_unregister(array('Zend_Loader_Autoloader','autoload'));

Я удалил это из конструктора Zend_Loader_Autoloader и изменил его на работу вне класса и отмену регистрации вместо регистрации загрузчика.

1 голос
/ 17 января 2010

Zend_Loader :: registerAutoload ('Zend_Loader', false);

Это в рамочной документации http://framework.zend.com/manual/en/zend.loader.html#zend.loader.load.autoload

Однако я не думаю, что у вас должны возникнуть какие-либо проблемы, если оставить автозагрузчик Zend включенным, пока вы регистрируете свой обратный вызов автозагрузки с помощью spl_autoload_register (), чтобы он добавлялся в стек автозагрузки.

Используя spl_autoload_register, будут вызываться все обратные вызовы, чтобы попытаться удовлетворить запрос. Я не знаю, будет ли прервана цепочка после успешного обратного вызова. Если это так, то его, вероятно, контролируют, возвращая true или false в обратных вызовах.

1 голос
/ 15 января 2010

Я предполагаю, что вы используете Zend_Application, который автоматически настраивает среду PHP, автозагрузку и загрузку. Это очень удобно. К сожалению, настройка Zend_Autoloader жестко запрограммирована в конструкторе, и я не вижу способа ее переопределить:

public function __construct($environment, $options = null)
{
    $this->_environment = (string) $environment;

    require_once 'Zend/Loader/Autoloader.php';
    $this->_autoloader = Zend_Loader_Autoloader::getInstance();

    //snip
}

Мое первое предложение - найти способ заставить Zend_Autoloader и ваш другой автозагрузчик работать в гармонии. Я использую Zend_Autoloader с новым Doctrine::IsolatedClassLoader без проблем. Совет о том, чтобы явно указывать пространства имен автозагрузчика или использовать pushAutoloader(), действителен и должен работать.

Однако, если это не вариант, вам, вероятно, следует отказаться от использования Zend_Application и самостоятельно выполнить настройку среды и загрузку. Хотя это неудобство, это не должно быть слишком сложно. В большинстве руководств по ZF до версии 1.8 (когда была введена Zend_Application) приводились примеры.

Вот (теперь устаревший) набор слайдов, детализирующий некоторые из них:

Начало работы с Zend Framework для v1.6

1 голос
/ 08 января 2010

Как насчет вашего bootstrap.php

protected function _initAutoloader()
{

       $this->getApplication()
            ->getAutoLoader()
            ->unregisterNamespace("Zend");

       // or 
       $this->getApplication()
            ->getAutoloader()
            ->removeAutoloader();
}
0 голосов
/ 08 января 2010

Я бы предложил использовать метод автозагрузки «push autoloader», который может получать другой экземпляр автозагрузчика и вызывать его, когда совпадают пространства имен. Поэтому вы можете использовать свой автозагрузчик вместе с Zend's ...

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