Автозагрузка классов в Yii 2.X как в Yii 1.X
- denis909
- Сообщения: 103
- Зарегистрирован: 2009.04.02, 16:04
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Автозагрузка классов в Yii 2.X как в Yii 1.X
Вы можете дружить с чем вам будет угодно, но с чем мне дружить или нет, разберусь сам.
Новички, также без вас разберуться что им нужно, а что нет, своими клеше вы только мешаете их развитию и умению принимать решения самостоятельно.
В этой теме уже достаточно написано критики, зачем повторяться.
Тем более, что ваш пример с PHP7 просто несостоятелен, что-то я не припоминаю чтобы там запрещали создание и использование классов в глобальном пространстве имен, а если в PHP7 это можно,то не вижу адекватных причин почему в Yii 2.X это должно быть нельзя.
Новички, также без вас разберуться что им нужно, а что нет, своими клеше вы только мешаете их развитию и умению принимать решения самостоятельно.
В этой теме уже достаточно написано критики, зачем повторяться.
Тем более, что ваш пример с PHP7 просто несостоятелен, что-то я не припоминаю чтобы там запрещали создание и использование классов в глобальном пространстве имен, а если в PHP7 это можно,то не вижу адекватных причин почему в Yii 2.X это должно быть нельзя.
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: Автозагрузка классов в Yii 2.X как в Yii 1.X
У меня есть классы
как будет работать автокомплит в IDE для их свойств без объявления через use?
Код: Выделить всё
modules\site\widgets\BlockWidget; ($blockId, $title...)
modules\page\widgets\BlockWidget; ($pageId, $options...)
modules\comments\widgets\BlockWidget; ($entityId, $rbacRule...)
- denis909
- Сообщения: 103
- Зарегистрирован: 2009.04.02, 16:04
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Автозагрузка классов в Yii 2.X как в Yii 1.X
Если у вас есть классы с одинаковыми названиями, то выносить их в глобальное пространство имен неверно, т.к. в этом случае не будет работать не только автокомплит, но и вообще код.
Только гарантированно уникальные классы могут быть вынесены.
Конкретно по вашему примеру, чтобы работать в глобальном пространстве имен, классы должны называться: SiteBlockWidget, PageBlockWidget, CommentsBlockWidget.
Называть их так и работать с моделями и хелперами в глобальном пространстве имен, или как у вас, на мой взляд, должно быть на усмотрение разработчика конкретного приложения.
Только гарантированно уникальные классы могут быть вынесены.
Конкретно по вашему примеру, чтобы работать в глобальном пространстве имен, классы должны называться: SiteBlockWidget, PageBlockWidget, CommentsBlockWidget.
Называть их так и работать с моделями и хелперами в глобальном пространстве имен, или как у вас, на мой взляд, должно быть на усмотрение разработчика конкретного приложения.
Re: Автозагрузка классов в Yii 2.X как в Yii 1.X
Это мне напоминает товарища с хабра
- denis909
- Сообщения: 103
- Зарегистрирован: 2009.04.02, 16:04
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Автозагрузка классов в Yii 2.X как в Yii 1.X
Весь топик не осилил, но с фразой "часто используемый код, должен представляться коротким синтаксисом" из него, согласен.
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: Автозагрузка классов в Yii 2.X как в Yii 1.X
Я постебался, в надежде, что Вы задумаетесь...
Вы писали ранее, что ваше решение нужно для миграции с yii1 на yii2. А сейчас аргументируете, что это чуть ли не стандарт для новичков.
За год то можно было хотя бы ради интереса поставить Netbeans или PhpStorm или что попроще...
И посмотреть, что да как...
Т.е. вместо того, чтобы использовать, как я хочу и как мне проще запомнить, я должен в голове держать все названия классов, чтобы случайно не назвать так, как было уже названо ранее...
Ну и чем по вашему отличается запись
CommentsBlockWidget от use comments\BlockWidget
в первом случае Вы набираете полностью название виджета, во втором - только Blo... и выбираете.
Я уж боюсь представить, а если вдруг Вы захотите переименовать класс в CommentsWidget -> сколько времени понадобится для поиска и замены.
А потом опубликовать на github...
------------
Но самое занимательное во всем этом > человек, который пишет расширение, чтобы не использовать namespace, сам использует namespace
https://github.com/denis909/yii2-global ... ion.php#L3
Вы писали ранее, что ваше решение нужно для миграции с yii1 на yii2. А сейчас аргументируете, что это чуть ли не стандарт для новичков.
За год то можно было хотя бы ради интереса поставить Netbeans или PhpStorm или что попроще...
И посмотреть, что да как...
Т.е. вместо того, чтобы использовать, как я хочу и как мне проще запомнить, я должен в голове держать все названия классов, чтобы случайно не назвать так, как было уже названо ранее...
Ну и чем по вашему отличается запись
CommentsBlockWidget от use comments\BlockWidget
в первом случае Вы набираете полностью название виджета, во втором - только Blo... и выбираете.
Я уж боюсь представить, а если вдруг Вы захотите переименовать класс в CommentsWidget -> сколько времени понадобится для поиска и замены.
А потом опубликовать на github...
------------
Но самое занимательное во всем этом > человек, который пишет расширение, чтобы не использовать namespace, сам использует namespace
https://github.com/denis909/yii2-global ... ion.php#L3
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: Автозагрузка классов в Yii 2.X как в Yii 1.X
Вы ж сами себе противоречите...
Добавлю тогда.Конкретно по вашему примеру, чтобы работать в глобальном пространстве имен, классы должны называться: SiteBlockWidget, PageBlockWidget, CommentsBlockWidget.
Допустим, виджет на странице используется в 10 разных местах.
Согласно вашему ответу выше, я должен назвать его CommentsBlockWidgetFromAdminThemeWithBlackStyleForEditorRole.
Когда как сейчас я могу использовать его как
use comments/BlockEditor во всех темах и стилях в админке или фронтенде для всех ролей и правил.
и писать далее 10 раз, как
BlockEditor::widget(...);
Это наверно, очень длинный синтаксис...
- denis909
- Сообщения: 103
- Зарегистрирован: 2009.04.02, 16:04
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Автозагрузка классов в Yii 2.X как в Yii 1.X
Как вам нравится ярлыки навешивать. Но в данном случае, ко мне это не относится. Я не призывал никого не использовать пространства имен вообще, а лишь говорил про то, что классы в глобальном пространстве имен имеют право на существование, наряду с классами в пространствах имен. А про библиотеки (классы) которые привязаны к разработчику, а не к приложению, я вместе со всеми радуюсь их появлянию в PHP и активно использую.Loveorigami писал(а): ↑2017.01.31, 15:40 самое занимательное во всем этом > человек, который пишет расширение, чтобы не использовать namespace, сам использует namespace
Вы писали за год я мог бы что-то пересмотреть.., а потом что я сам себе противоречу, основываясь на том что я писал годичной давности. Получается вам настолько хочется быть правым, что вы готовы меня осудить и за то что я не поменял точку зрения, и за то что я её поменял, одновременно. Ваш надуманный пример с длинным красным цветом я даже комментировать не буду, если до появления пространств имён у вас реально так классы назывались, то с профессиональной точки зрения, нам обсуждать нечего. А конкретно по первому примеру, если говорить о синтаксисе то без пространств название короче.
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: Автозагрузка классов в Yii 2.X как в Yii 1.X
Писали в двух соседних постах. Что синтаксис должен быть лаконичнее и что классы должны называться более длинно, чтоб они были уникальными
Вот для того, чтоб так не назывались, и придумали namespace, отчасти, и в этой плоскости у нас идет беседа. А не то, как у меня называлось тогда, когда.... Именно сейчас, когда можно облегчить с namespace, вы рекомендуете усложнить и называть длинно по сути передавая путь в название.... То что я Вам дважды выделил красным.
А как по другому, если мне нужно написать редакторский виджет комментариев в админке для для темы Admin в черном стиле?
2. Т.е. умножить на 10 сложновато посчитать. Я напишу
Код: Выделить всё
....
echo CommentsBlockWidget::widget(....)
echo CommentsBlockWidget::widget(....)
echo CommentsBlockWidget::widget(....)
echo CommentsBlockWidget::widget(....)
....
Код: Выделить всё
use comments\BlockWidget
....
echo BlockWidget::widget(....)
echo BlockWidget::widget(....)
echo BlockWidget::widget(....)
echo BlockWidget::widget(....)
....
Последний раз редактировалось Loveorigami 2017.01.31, 16:55, всего редактировалось 1 раз.
- denis909
- Сообщения: 103
- Зарегистрирован: 2009.04.02, 16:04
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Автозагрузка классов в Yii 2.X как в Yii 1.X
Вы опять хотите какие-то ярлыки навесить, я уже давно в этой теме ничего никому не рекомендую. Я сделал автозагрузчик классов из глобального пространства имен, и предлагаю им воспользоваться тем кому он может быть нужен, и не пользоваться тем кому это не надо. Нравятся вам пихать в пространства имен все подряд, пихайте на здоровье.Loveorigami писал(а): ↑2017.01.31, 16:40 У меня так не назвались, это вы рекомендуете так называть. А как по другому, если мне нужно написать редакторский виджет комментариев в админке для для темы Admin в черном стиле?
По поводу разных тем - на мой взгляд достаточно спорное решение делать так, чтобы классы из разных тем были доступны одновременно.
Я подключаю к автозагрузчику только ту тему, которая используется в данный момент.
И кстати, даже в проектах с пространствами имен делаю также. Например: \theme\widgets\EditorComments::widget();
Последний раз редактировалось denis909 2017.01.31, 16:57, всего редактировалось 1 раз.
- BrusSENS
- Сообщения: 565
- Зарегистрирован: 2012.07.26, 06:51
- Откуда: Новороссийск
- Контактная информация:
Re: Автозагрузка классов в Yii 2.X как в Yii 1.X
Да дружите, кто Вам запрещает?denis909 писал(а): ↑2017.01.31, 14:32 Вы можете дружить с чем вам будет угодно, но с чем мне дружить или нет, разберусь сам.
Новички, также без вас разберуться что им нужно, а что нет, своими клеше вы только мешаете их развитию и умению принимать решения самостоятельно.
Тем более, что ваш пример с PHP7 просто несостоятелен, что-то я не припоминаю чтобы там запрещали создание и использование классов в глобальном пространстве имен, а если в PHP7 это можно,то не вижу адекватных причин почему в Yii 2.X это должно быть нельзя.
Сообщество Yii и так состоит по большей части из джуниоров (к коим я и себя отношу), так Вы тут ещё такое используете. Не нужны NS - юзайте первую ветку.
Native Web - небольшой блог о веб разработке (временно на ремонте)
Режим обслуживания сайта для Yii 2.x.x
Режим обслуживания сайта для Yii 2.x.x
- denis909
- Сообщения: 103
- Зарегистрирован: 2009.04.02, 16:04
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Автозагрузка классов в Yii 2.X как в Yii 1.X
Если я верно понял точку зрения большинства тут отписавшихся, то классы в глобальном пространстве использовать в своих приложениях не нужно, потому что разработчики Yii фреймворка второй версии в своем фреймворке их не используют, и поддержки для них не сделали. На этом ваши аргументы заканчиваются.
Тот факт что фреймворк - это библиотека, а приложение нет, никто в расчет не принимает.
То что в современном PHP это никто не запрещал, и использует повсеместно до сих пор, тоже в игноре.
> Не нужны NS - юзайте первую ветку.
А что не PHP4?
Тот факт что фреймворк - это библиотека, а приложение нет, никто в расчет не принимает.
То что в современном PHP это никто не запрещал, и использует повсеместно до сих пор, тоже в игноре.
> Не нужны NS - юзайте первую ветку.
А что не PHP4?
Re: Автозагрузка классов в Yii 2.X как в Yii 1.X
нет, не так. Это вы утверждаете, что надо использовать контроллеры в корневом неймспейсе, а вам говорят, что разницы нет. Поэтому все используют в том неймспейсе, который поддерживается, а вы придумываете хаки, чтобы юзать нравящийся вам вариант.denis909 писал(а): ↑2017.02.04, 14:41 Если я верно понял точку зрения большинства тут отписавшихся, то классы в глобальном пространстве использовать в своих приложениях не нужно, потому что разработчики Yii фреймворка второй версии в своем фреймворке их не используют, и поддержки для них не сделали.
Re: Автозагрузка классов в Yii 2.X как в Yii 1.X
2 дня думал что еще сказать в свою пользу? =) Да всем тут всё равно на это произведение. Хочешь использовать глобально - используй. Хоть на кириллице классы называй, всем глубоко параллельно. Только вот навязывать не надо. Кто захочет, тот воспользуется. Кому понравится - поставит звезду
- denis909
- Сообщения: 103
- Зарегистрирован: 2009.04.02, 16:04
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Автозагрузка классов в Yii 2.X как в Yii 1.X
Вы правы, изначально так и было. Когда расширение было сделано, оно включало в себя как автозагрузчик классов, так и хаки. Этот подход был в корне неверный, отчасти из-за него столько критики вышло, и я выводы сделал. Теперь оно разделено на 2 расширения, специально чтобы не путать новичков, и не смущать общественность.
1. Совершенно "чистый" автозагрузчик классов в глобальном пространстве имён, оформленный в виде кошерного расширения фреймворка(компонента), использующий настройки путей в его стиле. Совершенно обычное расширение. Его я считаю полезным, и предлагаю всем без исключения добавить себе в проекты, на случай если будет надо загрузить классы из глобального пространства имен. Это хорошее и удобное расширение, попробуйте!
https://github.com/denis909/yii2-autoload-classes
2. Набор "грязных" хаков чтобы помимо воли разработчиков фреймворка делать контроллеры в глобальном пространстве имен. Данное расширение не рекомендуется к использованию повсеместно даже мною. Оно только для тех, кто знает зачем ему это надо. Например, для быстрой миграции проекта с первой версии. Я не призываю его использовать в новых проектах.
https://github.com/denis909/yii2-global-controllers
На данный момент все мои аргументы в поддержку только первого расширения - автозагрузчика.
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: Автозагрузка классов в Yii 2.X как в Yii 1.X
Вы собираетесь грузить в новый проект классы без NS ???
Покажите пример своего кода, чтоб окончательно убедить общественность в полезности расширения.
Выше ответили
viewtopic.php?f=28&t=35027&p=209750#p209498
почитайте тут (первая ссылка в Google)
http://codingexplained.com/coding/php/c ... namespaces
Так в чем разница то ????
Re: Автозагрузка классов в Yii 2.X как в Yii 1.X
о том и речь:denis909 писал(а): ↑2017.02.04, 15:391. Совершенно "чистый" автозагрузчик классов в глобальном пространстве имён, оформленный в виде кошерного расширения фреймворка(компонента), использующий настройки путей в его стиле. Совершенно обычное расширение. Его я считаю полезным, и предлагаю всем без исключения добавить себе в проекты, на случай если будет надо загрузить классы из глобального пространства имен. Это хорошее и удобное расширение, попробуйте!
https://github.com/denis909/yii2-autoload-classes
а) это никому не нужно, т.к. программисты стараются следовать стандартам, один из которых (psr-4) используется в 100% современных проектов
б) и даже если надо, вопрос решается композером на раз-два
- denis909
- Сообщения: 103
- Зарегистрирован: 2009.04.02, 16:04
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Автозагрузка классов в Yii 2.X как в Yii 1.X
Это достаточно спорные утверждения. Я не скажу что полностью с ними не согласен, но скажем так это не на 100% верно.zelenin писал(а): ↑2017.02.04, 16:10о том и речь:denis909 писал(а): ↑2017.02.04, 15:391. Совершенно "чистый" автозагрузчик классов в глобальном пространстве имён, оформленный в виде кошерного расширения фреймворка(компонента), использующий настройки путей в его стиле. Совершенно обычное расширение. Его я считаю полезным, и предлагаю всем без исключения добавить себе в проекты, на случай если будет надо загрузить классы из глобального пространства имен. Это хорошее и удобное расширение, попробуйте!
https://github.com/denis909/yii2-autoload-classes
а) это никому не нужно, т.к. программисты стараются следовать стандартам, один из которых (psr-4) используется в 100% современных проектов
б) и даже если надо, вопрос решается композером на раз-два
PSR-4 популярен, но он ещё не везде. И как раз чтобы подключать классы где его нет, и требуется автозагрузчик. Когда вы будете правы в этом, и действительно 100% кода будет PSR-4, то конечно же никакие автозагрузчики не понадобяться, ведь будет прочто нечего загружать.
Про composer я сразу ответил, что при модульной архитектуре приложения, это не лучшее решение. Модуль не может влиять на composer.json приложения. И после установки модуля придется composer.json менять, это неудобно. Гораздо удобнее использовать мое расширение для этой задачи! Конечно, если у вас есть такая задача.