Автозагрузка классов в Yii 2.X как в Yii 1.X

Обсуждение документации второй версии фреймворка. Переводы Cookbook и авторские рецепты.
Аватара пользователя
denis909
Сообщения: 103
Зарегистрирован: 2009.04.02, 16:04
Откуда: Санкт-Петербург
Контактная информация:

Re: Автозагрузка классов в Yii 2.X как в Yii 1.X

Сообщение denis909 »

zelenin писал(а): 2017.02.05, 12:58
denis909 писал(а): 2017.02.05, 12:47В вашем случае эта инструкция будет содержать задачу для клиента помимо всего прочего еще и отредактировать composer.json файл и запустить пересборку библиотек.
и не будет содержать инструкцию установки вашего расширения и редактирования конфига вашего расширения.
denis909 писал(а): 2017.02.05, 12:47Задача изначально была сделать установку модулей в систему простой и надежной. Редактирование composer.json и пересборка библиотек таковой не является.
наоборот же.
denis909 писал(а): 2017.02.05, 12:47Ваши аргументы все крутятся вокруг статичксих библиотек проекта, а не модулей динамически расширяющих функционал системы.
мои аргументы крутятся вокруг любых библиотек. Композер работает с библиотеками, не опираясь на философские парадигмы. Добавили в проект библиотеку - добавили в композер. Ваше разделение на статические и динамические либы мне не яснО.
denis909 писал(а): 2017.02.05, 12:47И если вы критикуете мой вариант, то не будьте голословны, и предложите уже свой вариант, как для конечного пользователя организовать дистрибьюцию модулей, динамически расширяющих функционал системы и содержащие классы без НС. У меня для вас нету больше аргументов. Знаете как лучше, предложите, мы сравним у кого более удачно. Сравним со стороны программиста, заказчика системы котороый финансирует разработку, и со стороны конечного пользователя.
я уже предложил - разархивировали архив с модулем, прописали в composer.json, перегенерили автозагрузчик - так делается везде, где есть вручную устанавливаемые либы. Устанавливает либу программист, поэтому ему не составит труда следовать инструкции модуля. Это не сложнее чем устанавливать через ваше расширение, зато стабильнее и стандартнее.
Вы пишете снова и снова одно и тоже, на все это я уже давал агрументы.

1. Редактировать json для установки модуля на мой взляд слишком тяжело для конечного пользователя не программиста.
2. Пересборка пакетов такой процесс который не стоит запускать лишний раз на рабочем проекте без необходимости.
3. Для добавления модуля придется делать несколько действий, чтобы в конфиг приложения в modules добавить модуль, например.

Технически я согласился что через composer возможно, но примел аргументы почему это неудобно для конечного пользователя.
zelenin писал(а): 2017.02.05, 12:58 Ваше разделение на статические и динамические либы мне не яснО.
Вы вообще хоть в теории допускаете, что предмет наших разногласий может быть в этом, а не в композере?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Автозагрузка классов в Yii 2.X как в Yii 1.X

Сообщение zelenin »

denis909 писал(а): 2017.02.05, 13:101. Редактировать json для установки модуля на мой взляд слишком тяжело для конечного пользователя не программиста.
кто пакет будет использовать в коде? не программист? оба варианта установки автозагрузчика для не-программиста будут одинаковы сложны. непонятный аргумент.
denis909 писал(а): 2017.02.05, 13:102. Пересборка пакетов такой процесс который не стоит запускать лишний раз на рабочем проекте без необходимости.
пересборка загрузчика, а не пакетов. я уже несколько раз вас исправлял.
denis909 писал(а): 2017.02.05, 13:103. Для добавления модуля придется делать несколько действий, чтобы в конфиг приложения в modules добавить модуль, например.
это не зависит от способа добавления автозагрузки.
Не пойму зачем вы приплетаете сюда не-программиста, и если он может сконфигурировать модуль, то какая ему разница как добавлять автозагрузку?
denis909 писал(а): 2017.02.05, 13:10Технически я согласился что через composer возможно, но примел аргументы почему это неудобно для конечного пользователя.
во-первых, это одинаково. во-вторых, см. выше абзацем
denis909 писал(а): 2017.02.05, 13:10Вы вообще хоть в теории допускаете, что предмет наших разногласий может быть в этом, а не в композере?
вы не ерничайте, а объясняйте в чем отличия, и как эти отличия не позволяют пользоваться загрузчиком композера, работающего с любым кодом, не важно какой смысл в этот код вкладывает разработчик.
Взяли архив, распаковали, подключили - это обычная либа. Никакая не статическая или динамическая. Просто либа из кода.
Аватара пользователя
denis909
Сообщения: 103
Зарегистрирован: 2009.04.02, 16:04
Откуда: Санкт-Петербург
Контактная информация:

Re: Автозагрузка классов в Yii 2.X как в Yii 1.X

Сообщение denis909 »

zelenin писал(а): 2017.02.05, 13:18
denis909 писал(а): 2017.02.05, 13:101. Редактировать json для установки модуля на мой взляд слишком тяжело для конечного пользователя не программиста.
кто пакет будет использовать в коде? не программист? оба варианта установки автозагрузчика для не-программиста будут одинаковы сложны. непонятный аргумент.
denis909 писал(а): 2017.02.05, 13:102. Пересборка пакетов такой процесс который не стоит запускать лишний раз на рабочем проекте без необходимости.
пересборка загрузчика, а не пакетов. я уже несколько раз вас исправлял.
denis909 писал(а): 2017.02.05, 13:103. Для добавления модуля придется делать несколько действий, чтобы в конфиг приложения в modules добавить модуль, например.
это не зависит от способа добавления автозагрузки.
Не пойму зачем вы приплетаете сюда не-программиста, и если он может сконфигурировать модуль, то какая ему разница как добавлять автозагрузку?
denis909 писал(а): 2017.02.05, 13:10Технически я согласился что через composer возможно, но примел аргументы почему это неудобно для конечного пользователя.
во-первых, это одинаково. во-вторых, см. выше абзацем
denis909 писал(а): 2017.02.05, 13:10Вы вообще хоть в теории допускаете, что предмет наших разногласий может быть в этом, а не в композере?
вы не ерничайте, а объясняйте в чем отличия, и как эти отличия не позволяют пользоваться загрузчиком композера, работающего с любым кодом, не важно какой смысл в этот код вкладывает разработчик.
Взяли архив, распаковали, подключили - это обычная либа. Никакая не статическая или динамическая. Просто либа из кода.
Мне в целом вам больше нечего добавить. Я предложил вам привести свой вариант установки динамического модуля в систему, а в ответ вы пишете опять какие-то отрывочные примеры использования композера. Но если хотите, давайте попробуем еще раз.

Есть некоторая система у нескольких клиентов. Кто обслуживает систему никто не знает. Может быть прогрммист, может быть верстальщик/дизайнер, может быть системный администратор, может быть клиент сам. У вас есть задача написать динамический модуль, расширающий функционал системы. Вы написали этот модуль. Какие действия клиент должен будет произвести в вашем случае?

Редактировать json, запускать командную строку!!! У него в принципе может не быть командной строки вообще, уже на этом ваш вариант не походит. Даже не доходя до json.
Аватара пользователя
denis909
Сообщения: 103
Зарегистрирован: 2009.04.02, 16:04
Откуда: Санкт-Петербург
Контактная информация:

Re: Автозагрузка классов в Yii 2.X как в Yii 1.X

Сообщение denis909 »

Раз уж тема превратилась в дистрибьюцию динамических модулей, то чтобы не быть голословным распишу более подробно свой вариант.
Есть файл с модулем, в нем содержится папка по названию модуля, внутри которой файлы модуля, и config.php файл модуля который надо подключить к основному конфигу приложения. В этом файле config.php прописана вся интеграция модуля в систему, его надо только инклудить.

Для распаковки модуля в нужную папку, в админке есть раздел, который позволяет загрузить zip файл и разахивирует его куда нужно и записывет в список модулей в БД новый модуль. Дальше в админке клиент видит список модулей, те из которых ему нужны отмечает флагами.
При изменении набора отмеченных флагами модулей система перегенерирует файл app/config/modules.php в котором только инклудятся config.php файлы из модулей.

Вот это на мой взляд хорошая дистрибьюция модулей, а то что вы пишете про composer, командную строку и т.п. не решает поставленной задачи.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Автозагрузка классов в Yii 2.X как в Yii 1.X

Сообщение zelenin »

denis909 писал(а): 2017.02.05, 13:34Мне в целом вам больше нечего добавить. Я предложил вам привести свой вариант установки динамического модуля в систему, а в ответ вы пишете опять какие-то отрывочные примеры использования композера. Но если хотите, давайте попробуем еще раз.
так дискуссии не ведутся. я вам даже сниппет для composer.json привел, и несколько раз прописал процесс: добавляем в composer.json::autoload для автозагрузки, запускаем команду, отрабатывающую секунд за 5, дальше конфигурация непосредственно библиотеки.
denis909 писал(а): 2017.02.05, 13:34Есть некоторая система у нескольких клиентов. Кто обслуживает систему никто не знает. Может быть прогрммист, может быть верстальщик/дизайнер, может быть системный администратор, может быть клиент сам. У вас есть задача написать динамический модуль, расширающий функционал системы. Вы написали этот модуль. Какие действия клиент должен будет произвести в вашем случае?

Редактировать json, запускать командную строку!!! У него в принципе может не быть командной строки вообще, уже на этом ваш вариант не походит. Даже не доходя до json.
не доходя до json, мы не доходим и до конфига приложения. значит он никак не устанавливает. конец истории.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Автозагрузка классов в Yii 2.X как в Yii 1.X

Сообщение zelenin »

denis909 писал(а): 2017.02.05, 13:44 Раз уж тема превратилась в дистрибьюцию динамических модулей, то чтобы не быть голословным распишу более подробно свой вариант.
Есть файл с модулем, в нем содержится папка по названию модуля, внутри которой файлы модуля, и config.php файл модуля который надо подключить к основному конфигу приложения. В этом файле config.php прописана вся интеграция модуля в систему, его надо только инклудить.

Для распаковки модуля в нужную папку, в админке есть раздел, который позволяет загрузить zip файл и разахивирует его куда нужно и записывет в список модулей в БД новый модуль. Дальше в админке клиент видит список модулей, те из которых ему нужны отмечает флагами.
При изменении набора отмеченных флагами модулей система перегенерирует файл app/config/modules.php в котором только инклудятся config.php файлы из модулей.

Вот это на мой взляд хорошая дистрибьюция модулей, а то что вы пишете про composer, командную строку и т.п. не решает поставленной задачи.
хороший кейс. сразу бы привели его и не надо было бы про composer рассуждать. это называется плагины. как в cms. Вордпрессах всяких итд.
Решается опять же просто. Плагин работает так как вы и сказали - менеджер плагинов динамически находит плагин и инклудит его. в вашем случае он должен заинклудить config.php, в котором будет инклудится загрузчик плагина, добавляющий классы в общую видимость. реализацию опять же можно посмотреть в композере (autoload_psr4.php - тут у нас массив из одного элемента "" => __DIR__ и ClassLoader.php который вы можете покоцать из 400 строк до 100, чтобы покрывал ваш конкретный кейс - он внесет ваши классы из текущей диры в общую видимость проекта). Можете и свой класслоадер написать строк из 50, но я бы доверился проверенному годами.
и никаких сторонних расширений.
Аватара пользователя
denis909
Сообщения: 103
Зарегистрирован: 2009.04.02, 16:04
Откуда: Санкт-Петербург
Контактная информация:

Re: Автозагрузка классов в Yii 2.X как в Yii 1.X

Сообщение denis909 »

zelenin писал(а): 2017.02.05, 13:45
denis909 писал(а): 2017.02.05, 13:34Мне в целом вам больше нечего добавить. Я предложил вам привести свой вариант установки динамического модуля в систему, а в ответ вы пишете опять какие-то отрывочные примеры использования композера. Но если хотите, давайте попробуем еще раз.
так дискуссии не ведутся. я вам даже сниппет для composer.json привел, и несколько раз прописал процесс: добавляем в composer.json::autoload для автозагрузки, запускаем команду, отрабатывающую секунд за 5, дальше конфигурация непосредственно библиотеки.
denis909 писал(а): 2017.02.05, 13:34Есть некоторая система у нескольких клиентов. Кто обслуживает систему никто не знает. Может быть прогрммист, может быть верстальщик/дизайнер, может быть системный администратор, может быть клиент сам. У вас есть задача написать динамический модуль, расширающий функционал системы. Вы написали этот модуль. Какие действия клиент должен будет произвести в вашем случае?

Редактировать json, запускать командную строку!!! У него в принципе может не быть командной строки вообще, уже на этом ваш вариант не походит. Даже не доходя до json.
не доходя до json, мы не доходим и до конфига приложения. значит он никак не устанавливает. конец истории.
Я ответил уже на это несколько раз, такой вариант дистрибьюции модулей не приемлем для данного кейса, по причине того что требует квалифицированного программиста на стороне юзера системы. Если для вашей системы приемлемо ковырять вручную json для каждого модуля, то делайте это так. Но мне не понятно почему вы навязываете свою точку зрения как единственно правильную. Вы высказались как считаете более удобно для вас, я высказался как более удобно с моей точки зрения. О каком ведении дискусии может быть идти речь, если вы пишете одно и тоже. Да вы привели сниппеты для json. Заказчик системы посмотрел ваше описание, как установить динамический модуль в вашу систему, ничего не понял, решил что и для его клиентов это слишком сложно. В итоге вас не выбрали в тендере. Конец истории.
Аватара пользователя
denis909
Сообщения: 103
Зарегистрирован: 2009.04.02, 16:04
Откуда: Санкт-Петербург
Контактная информация:

Re: Автозагрузка классов в Yii 2.X как в Yii 1.X

Сообщение denis909 »

zelenin писал(а): 2017.02.05, 13:55 Можете и свой класслоадер написать строк из 50
Эмммм.... Вообщем то я так и сделал. И теперь делюсь этим класслоадером с общественностью.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Автозагрузка классов в Yii 2.X как в Yii 1.X

Сообщение zelenin »

вопросу автозагрузки кода уже много-много лет. Сначала это решалось простым require/include, потом появился 5.4 с неймспейсами и spl_autoload для автоматизирования и самодельными загрузчиками, потом появился psr-0/psr-4 и composer с универсальным загрузчиком на все случаи жизни. и тут вы - бац - и вернулись в эпоху require/include.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Автозагрузка классов в Yii 2.X как в Yii 1.X

Сообщение zelenin »

denis909 писал(а): 2017.02.05, 13:59
zelenin писал(а): 2017.02.05, 13:45
denis909 писал(а): 2017.02.05, 13:34Мне в целом вам больше нечего добавить. Я предложил вам привести свой вариант установки динамического модуля в систему, а в ответ вы пишете опять какие-то отрывочные примеры использования композера. Но если хотите, давайте попробуем еще раз.
так дискуссии не ведутся. я вам даже сниппет для composer.json привел, и несколько раз прописал процесс: добавляем в composer.json::autoload для автозагрузки, запускаем команду, отрабатывающую секунд за 5, дальше конфигурация непосредственно библиотеки.
denis909 писал(а): 2017.02.05, 13:34Есть некоторая система у нескольких клиентов. Кто обслуживает систему никто не знает. Может быть прогрммист, может быть верстальщик/дизайнер, может быть системный администратор, может быть клиент сам. У вас есть задача написать динамический модуль, расширающий функционал системы. Вы написали этот модуль. Какие действия клиент должен будет произвести в вашем случае?

Редактировать json, запускать командную строку!!! У него в принципе может не быть командной строки вообще, уже на этом ваш вариант не походит. Даже не доходя до json.
не доходя до json, мы не доходим и до конфига приложения. значит он никак не устанавливает. конец истории.
Я ответил уже на это несколько раз, такой вариант дистрибьюции модулей не приемлем для данного кейса, по причине того что требует квалифицированного программиста на стороне юзера системы. Если для вашей системы приемлемо ковырять вручную json для каждого модуля, то делайте это так. Но мне не понятно почему вы навязываете свою точку зрения как единственно правильную. Вы высказались как считаете более удобно для вас, я высказался как более удобно с моей точки зрения. О каком ведении дискусии может быть идти речь, если вы пишете одно и тоже. Да вы привели сниппеты для json. Заказчик системы посмотрел ваше описание, как установить динамический модуль в вашу систему, ничего не понял, решил что и для его клиентов это слишком сложно. В итоге вас не выбрали в тендере. Конец истории.
я пояснил, что вы сразу не поставили в известность о плагинах, загружаемых из админки - тут композер конечно не приемлем.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Автозагрузка классов в Yii 2.X как в Yii 1.X

Сообщение zelenin »

denis909 писал(а): 2017.02.05, 14:02
zelenin писал(а): 2017.02.05, 13:55 Можете и свой класслоадер написать строк из 50
Эмммм.... Вообщем то я так и сделал. И теперь делюсь этим класслоадером с общественностью.
для реализации плагинной системы включите свой класслоадер в свой плагин и не заставляйте его отдельно устанавливать. Опять же вы сделали странное устаревшее решение, вместо spl_autoload, который специально создан для автозагрузки вместо include, который использовался в 2000х годах.
Аватара пользователя
denis909
Сообщения: 103
Зарегистрирован: 2009.04.02, 16:04
Откуда: Санкт-Петербург
Контактная информация:

Re: Автозагрузка классов в Yii 2.X как в Yii 1.X

Сообщение denis909 »

zelenin писал(а): 2017.02.05, 14:02 вопросу автозагрузки кода уже много-много лет. Сначала это решалось простым require/include, потом появился 5.4 с неймспейсами и spl_autoload для автоматизирования и самодельными загрузчиками, потом появился psr-0/psr-4 и composer с универсальным загрузчиком на все случаи жизни. и тут вы - бац - и вернулись в эпоху require/include.
В серьезных банках по всему миру про это ничего не знают. Код библитоек до сих пор на уровне PHP 4 там. Поэтому я писал уже много раз, я не призываю всех так делать. Но факт в том, что это приходится делать до сих пор. А вы в розовых очках что все погловно уже перешли на PSR-4. Это не так.
Аватара пользователя
denis909
Сообщения: 103
Зарегистрирован: 2009.04.02, 16:04
Откуда: Санкт-Петербург
Контактная информация:

Re: Автозагрузка классов в Yii 2.X как в Yii 1.X

Сообщение denis909 »

zelenin писал(а): 2017.02.05, 14:08
denis909 писал(а): 2017.02.05, 14:02
zelenin писал(а): 2017.02.05, 13:55 Можете и свой класслоадер написать строк из 50
Эмммм.... Вообщем то я так и сделал. И теперь делюсь этим класслоадером с общественностью.
для реализации плагинной системы включите свой класслоадер в свой плагин и не заставляйте его отдельно устанавливать. Опять же вы сделали странное устаревшее решение, вместо spl_autoload, который специально создан для автозагрузки вместо include, который использовался в 2000х годах.
Я просто взял основу загрузчика от Yii фреймворка первой версии, он не 2000 года, а свежее.
Может быть вы и можете загрузчик лучше сделать, то пока вы его не сделали и нам не показали, это просто слова.
Я привел код который решает задачу, а вы в ответ кричите - "можно лучше".
Я даже соглашусь с вами, ради разнообразия. Можно лучше! Но пока что для Yii фреймворка 2 лучше ничего не сделано.

Относительно автозагрузчика в плагине. Я писал в кейсе что в системе гарантированно будет десятки плагинов с подобной белебердой. Следуя вашей логике надо в каждый такой плагин пихать копию автозагрузчика... Но тогда в системе будет несколько десятков автозагрузчиков. Я вообще против того чтобы автозагрузчики поставлялись в плагинах, считаю что такой функционал должен быть только в ядре системы.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Автозагрузка классов в Yii 2.X как в Yii 1.X

Сообщение zelenin »

denis909 писал(а): 2017.02.05, 14:09
zelenin писал(а): 2017.02.05, 14:02 вопросу автозагрузки кода уже много-много лет. Сначала это решалось простым require/include, потом появился 5.4 с неймспейсами и spl_autoload для автоматизирования и самодельными загрузчиками, потом появился psr-0/psr-4 и composer с универсальным загрузчиком на все случаи жизни. и тут вы - бац - и вернулись в эпоху require/include.
В серьезных банках по всему миру про это ничего не знают. Код библитоек до сих пор на уровне PHP 4 там. Поэтому я писал уже много раз, я не призываю всех так делать. Но факт в том, что это приходится делать до сих пор. А вы в розовых очках что все погловно уже перешли на PSR-4. Это не так.
опять двадцать пять. тут нет речи про psr-4. есть речь о вопросе автозагрузки.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Автозагрузка классов в Yii 2.X как в Yii 1.X

Сообщение zelenin »

denis909 писал(а): 2017.02.05, 14:17Может быть вы и можете загрузчик лучше сделать, то пока вы его не сделали и нам не показали, это просто слова.
хаха. вы читайте что я пишу и гуглите используемые мной функции. Я вам написал о а) spl_autoload б) о готовой реализации универсального загрузчика
Все, что вам нужно сделать в ваших плагинах, это вызвать в config.php следующий код:

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

        spl_autoload_register(function($className) {
            $fileName = $className.'.php';
            if(file_exists($fileName)) {
                include $fileName;
            }
        });
можете расширить сниппет до любых кейсов - подпапки, префиксы имен классов итд.
Последний раз редактировалось zelenin 2017.02.05, 14:25, всего редактировалось 1 раз.
Аватара пользователя
denis909
Сообщения: 103
Зарегистрирован: 2009.04.02, 16:04
Откуда: Санкт-Петербург
Контактная информация:

Re: Автозагрузка классов в Yii 2.X как в Yii 1.X

Сообщение denis909 »

zelenin писал(а): 2017.02.05, 14:18
denis909 писал(а): 2017.02.05, 14:09
zelenin писал(а): 2017.02.05, 14:02 вопросу автозагрузки кода уже много-много лет. Сначала это решалось простым require/include, потом появился 5.4 с неймспейсами и spl_autoload для автоматизирования и самодельными загрузчиками, потом появился psr-0/psr-4 и composer с универсальным загрузчиком на все случаи жизни. и тут вы - бац - и вернулись в эпоху require/include.
В серьезных банках по всему миру про это ничего не знают. Код библитоек до сих пор на уровне PHP 4 там. Поэтому я писал уже много раз, я не призываю всех так делать. Но факт в том, что это приходится делать до сих пор. А вы в розовых очках что все погловно уже перешли на PSR-4. Это не так.
опять двадцать пять. тут нет речи про psr-4. есть речь о вопросе автозагрузки.
А про автозагрузчик уже все сказано было ранее, я против того чтобы на меня навешивали ярлыки. Вы меня обвинили в том что я тяну общественность обратно в эпоху в эпоху require/include. На что я в очередной раз ответил что никуда никого не тяну, а предлагаю решение соответсвующее окружающей действительности. А ваши взоялы на предмет в целом очень идеалистичны, и действительности не соответсвуют.
Аватара пользователя
denis909
Сообщения: 103
Зарегистрирован: 2009.04.02, 16:04
Откуда: Санкт-Петербург
Контактная информация:

Re: Автозагрузка классов в Yii 2.X как в Yii 1.X

Сообщение denis909 »

zelenin писал(а): 2017.02.05, 14:22
denis909 писал(а): 2017.02.05, 14:17Может быть вы и можете загрузчик лучше сделать, то пока вы его не сделали и нам не показали, это просто слова.
хаха. вы читайте что я пишу и гуглите используемые мной функции. Я вам написал о а) spl_autoload б) о готовой реализации универсального загрузчика
Все, что вам нужно сделать в ваших плагинах, это вызвать в config.php следующий код:

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

        spl_autoload_register(function($className) {
            $fileName = $className.'.php';
            if(file_exists($fileName)) {
                include $fileName;
            }
        });
можете расширить сниппет до любых кейсов - подпапки, префиксы имен классов итд.
Эмммм.... я собственно это и сделал. Посмотрите init метода компонента, там написано:

spl_autoload_register([$this, 'autoload']);

Сам компонент - это и есть расшиние для кейсов с папками.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Автозагрузка классов в Yii 2.X как в Yii 1.X

Сообщение zelenin »

denis909 писал(а): 2017.02.05, 14:28
zelenin писал(а): 2017.02.05, 14:22
denis909 писал(а): 2017.02.05, 14:17Может быть вы и можете загрузчик лучше сделать, то пока вы его не сделали и нам не показали, это просто слова.
хаха. вы читайте что я пишу и гуглите используемые мной функции. Я вам написал о а) spl_autoload б) о готовой реализации универсального загрузчика
Все, что вам нужно сделать в ваших плагинах, это вызвать в config.php следующий код:

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

        spl_autoload_register(function($className) {
            $fileName = $className.'.php';
            if(file_exists($fileName)) {
                include $fileName;
            }
        });
можете расширить сниппет до любых кейсов - подпапки, префиксы имен классов итд.
Эмммм.... я собственно это и сделал. Посмотрите init метода компонента, там написано:

spl_autoload_register([$this, 'autoload']);

Сам компонент - это и есть расшиние для кейсов с папками.
и теперь вы заставляете клиента прописывать папку плагина в конфиге вместо автоматической загрузки. неужели так проще для клиента?)
Аватара пользователя
denis909
Сообщения: 103
Зарегистрирован: 2009.04.02, 16:04
Откуда: Санкт-Петербург
Контактная информация:

Re: Автозагрузка классов в Yii 2.X как в Yii 1.X

Сообщение denis909 »

zelenin писал(а): 2017.02.05, 14:30 и теперь вы заставляете клиента прописывать папку плагина в конфиге вместо автоматической загрузки. неужели так проще для клиента?)
Не совем понял вас.
Расширение устанавливает программист 1 раз, не важно разработчик, или программист клиента.
Дистрибьюция плагинов идет для клиента уже без программиста.

Именно это я имел ввиду когда сразу написал что composer не подходит для модульной архитектуры приложения, а другого способа в Yii2 для автозагрузки без NS нет.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Автозагрузка классов в Yii 2.X как в Yii 1.X

Сообщение zelenin »

для какой цели используется ваше расширение при установке плагина, если плагин может сам себе загрузить с помощью 5 строк? зачем здесь вообще программист, если плагин можно установить из админки? Неужели в какой-то cms вы видели, что для установки плагина надо еще копаться в коде для автозагрузки классов?
Ответить