(Yaf >=1.0.0)
Yaf_Loader представляет комплексное решение для автозагрузки для Yaf.
При первом извлечении экземпляра Yaf_Application, Yaf_Loader создаёт экземпляр-одиночку и регистрируется с помощью spl_autoload. Вы извлекаете экземпляр, используя Yaf_Loader::getInstance()
Yaf_Loader попытается загрузить класс только один раз, в случае возникновения ошибки, зависит от yaf.use_spl_auload, если эта конфигурация включена Yaf_Loader::autoload() вернёт false
, таким образом предоставляя возможность другой функции автозагрузки. Если выключена (по умолчанию), Yaf_Loader::autoload() вернёт true
, а также сработает очень полезное предупреждение (полезно, чтобы выяснить, почему класс не может быть загружен).
Замечание:
Пожалуйста, оставьте yaf.use_spl_autoload выключенным, если в какой-то библиотеке нет собственного механизма автозагрузки и его невозможно переписать.
По умолчанию Yaf_Loader предполагает, что вся библиотека (сценарий, определённый классом) хранится в каталоге глобальной библиотеки, который определён в php.ini (yaf.library).
Если вы хотите с помощью Yaf_Loader выполнить поиск некоторых классов (библиотек) в каталоге локальных классов (который определён в application.ini, по умолчанию это application.directory. "/library"), вы должны зарегистрировать префикс класса, используя Yaf_Loader::registerLocalNameSpace()
Давайте посмотрим несколько примеров (при условии, что APPLICATION_PATH application.directory):
Пример #1 Пример конфигурации
// Предполагаются следующие настройки в php.ini: yaf.library = "/global_dir"application.library = APPLICATION_PATH "/library"
Пример #2 Зарегистрировать локальное пространство имён
<?php
class Bootstrap extends Yaf_Bootstrap_Abstract{
public function _initLoader($dispatcher) {
Yaf_Loader::getInstance()->registerLocalNameSpace(array("Foo", "Bar"));
}
?>
Пример #3 Пример загрузки класса
class Foo_Bar_Test => class GLO_Name => class BarNon_Test
Пример #4 Пример загрузки класса имён
class \Foo\Bar\Dummy => class \FooBar\Bar\Dummy =>
Вы можете заметить, что все папки с первой буквой заглавными, вы можете сделать их строчными, установив yaf.lowcase_path = On в php.ini.
Yaf_Loader также предназначен для загрузки классов MVC, и правило таково:
Пример #5 Пример загрузки класса MVC
Controller Classes => Model Classes => Plugin Classes =>
Пример #6 Классовые различия MVC
Controller Classes => Model Classes => Plugin Classes =>
Пример #7 Пример загрузки MVC
class IndexController class DataModel => class DummyPlugin => class A_B_TestModel =>
также на каталог будет влиять yaf.lowcase_path.Замечание:
Начиная с 2.1.18, Yaf поддерживает автозагрузку контроллеров для стороны пользовательского скрипта (что означает автозагрузку, запускаемую пользовательским скриптом php, например: доступ к статическому свойству контроллера в Bootstrap или плагинах), но автозагрузчик только пытается найти скрипт класса контроллера в папке модуля по умолчанию, которая называется "APPLICATION_PATH/controllers/".
По умолчанию это значение равно application.directory . "/library", вы можете изменить это либо в application.ini(application.library), либо вызвать Yaf_Loader::setLibraryPath()