Composer autoloader

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Composer autoloader

Сообщение anton44eg »

Можете подсказать где почитать, посмотреть, чтобы разобраться как именно работает autoloader у Composer`а, а то пока выходит вот такое ужасное:

Код: Выделить всё

'import'=>array(
        'application.vendor.phpnode.yiipassword.*',
), 
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Composer autoloader

Сообщение yiijeka »

http://getcomposer.org/doc/01-basic-usa ... utoloading
После

Код: Выделить всё

require 'vendor/autoload.php'; 
все требуемые файлы загружаются автоматически.
Или что-то другое тут имеется ввиду?
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Composer autoloader

Сообщение anton44eg »

в том то и дело, что не подгружаются.
_axl
Сообщения: 36
Зарегистрирован: 2011.10.01, 12:07

Re: Composer autoloader

Сообщение _axl »

а так:

Код: Выделить всё

        spl_autoload_unregister(array('YiiBase','autoload'));
        require 'vendor/autoload.php'; 
        spl_autoload_register(array('YiiBase','autoload'), true, true);
 
Аватара пользователя
Dmitry
Сообщения: 112
Зарегистрирован: 2010.06.07, 15:00

Re: Composer autoloader

Сообщение Dmitry »

Народ, перестаньте городить костыли, скоро все станет ОК ) Вот тут можно прочитать: https://github.com/yiisoft/yii/issues/2642

А пока приходится извращаться с помощью setPathOfAlias или принудительным импортом всех классов, как указал автор в посте
Yii Jabber Conference: yii@conference.jabber.ru
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Composer autoloader

Сообщение anton44eg »

Та хотелось бы разобраться и понять как оно работает:) Можно жить и с ручной подгрузкой
thekip
Сообщения: 16
Зарегистрирован: 2012.08.03, 16:07

Re: Composer autoloader

Сообщение thekip »

Поскольку эта тема появляется в первой строчке гугла по запросу "yii composer autoload" решил её немного обновить современной информацией, что бы те кто только ищут решение этого вопроса не вводились в заблуждение.
Yii2 отлично работает с композером, но если у вас уже есть большой проект на Yii1, легко и быстро перенести его на вторую версию не выйдет, и поэтому этот материал может быть кому то полезен.

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

Например:

Код: Выделить всё

//Расширение класса находящегося в композере
//ComposerAutloadedClass должен прекрасно загрузиться из композера
class Foo extends ComposerAutloadedClass {

}

//или прямое инстанциирование
$foo = new ComposerAutloadedClass(); //тоже будет работать.

//или 
class_exist('ComposerAutloadedClass', TRUE); //последний параметр не обязателен, т.к. он по умолчанию в true, но именно он отвечает за то что имя класса будет передано функции автолоаду.
 
Не будет работать в случаях когда класс загружается функцией Yii::import()
Это происходит чаще всего при конфигурировании основного приложения:

Код: Выделить всё

'components' => array(
    'foo' => array(
        class => 'ComposerAutoLoadedClass'
    )
)
 
В этом случае автозагрузка не сработает, т.к. конфигурирование компонента пройдет через функцию Yii::import() в которой принудительно указан запуск автозагрузчика Yii.

Однако в предстоящей версии 1.1.16 эту проблему поправили, и автозагрузка работает во всех случаях.
Сейчас же пока 1.1.16 не вышла придется довольствоватсья тем что есть и прописывать в конфиге полный путь к расширениям из папки vendors.
Ответить