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

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

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

Сообщение denis909 »

Вы можете дружить с чем вам будет угодно, но с чем мне дружить или нет, разберусь сам.
Новички, также без вас разберуться что им нужно, а что нет, своими клеше вы только мешаете их развитию и умению принимать решения самостоятельно.
В этой теме уже достаточно написано критики, зачем повторяться.
Тем более, что ваш пример с PHP7 просто несостоятелен, что-то я не припоминаю чтобы там запрещали создание и использование классов в глобальном пространстве имен, а если в PHP7 это можно,то не вижу адекватных причин почему в Yii 2.X это должно быть нельзя.
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

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

Сообщение Loveorigami »

У меня есть классы

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

modules\site\widgets\BlockWidget; ($blockId, $title...)
modules\page\widgets\BlockWidget; ($pageId, $options...)
modules\comments\widgets\BlockWidget;  ($entityId, $rbacRule...)
как будет работать автокомплит в IDE для их свойств без объявления через use?
Аватара пользователя
denis909
Сообщения: 103
Зарегистрирован: 2009.04.02, 16:04
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение denis909 »

Если у вас есть классы с одинаковыми названиями, то выносить их в глобальное пространство имен неверно, т.к. в этом случае не будет работать не только автокомплит, но и вообще код.
Только гарантированно уникальные классы могут быть вынесены.
Конкретно по вашему примеру, чтобы работать в глобальном пространстве имен, классы должны называться: SiteBlockWidget, PageBlockWidget, CommentsBlockWidget.
Называть их так и работать с моделями и хелперами в глобальном пространстве имен, или как у вас, на мой взляд, должно быть на усмотрение разработчика конкретного приложения.
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

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

Сообщение Onotole »

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

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

Сообщение denis909 »

Весь топик не осилил, но с фразой "часто используемый код, должен представляться коротким синтаксисом" из него, согласен.
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

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

Сообщение Loveorigami »

Я постебался, в надежде, что Вы задумаетесь...
Вы писали ранее, что ваше решение нужно для миграции с yii1 на yii2. А сейчас аргументируете, что это чуть ли не стандарт для новичков.
За год то можно было хотя бы ради интереса поставить Netbeans или PhpStorm или что попроще...
И посмотреть, что да как...

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

Ну и чем по вашему отличается запись
CommentsBlockWidget от use comments\BlockWidget

в первом случае Вы набираете полностью название виджета, во втором - только Blo... и выбираете.
Я уж боюсь представить, а если вдруг Вы захотите переименовать класс в CommentsWidget -> сколько времени понадобится для поиска и замены.
А потом опубликовать на github...
------------
Но самое занимательное во всем этом > человек, который пишет расширение, чтобы не использовать namespace, сам использует namespace
https://github.com/denis909/yii2-global ... ion.php#L3
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

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

Сообщение Loveorigami »

denis909 писал(а): 2017.01.31, 15:32 Весь топик не осилил, но с фразой "часто используемый код, должен представляться коротким синтаксисом" из него, согласен.
Вы ж сами себе противоречите...
Конкретно по вашему примеру, чтобы работать в глобальном пространстве имен, классы должны называться: 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

Сообщение denis909 »

Loveorigami писал(а): 2017.01.31, 15:40 самое занимательное во всем этом > человек, который пишет расширение, чтобы не использовать namespace, сам использует namespace
Как вам нравится ярлыки навешивать. Но в данном случае, ко мне это не относится. Я не призывал никого не использовать пространства имен вообще, а лишь говорил про то, что классы в глобальном пространстве имен имеют право на существование, наряду с классами в пространствах имен. А про библиотеки (классы) которые привязаны к разработчику, а не к приложению, я вместе со всеми радуюсь их появлянию в PHP и активно использую.

Вы писали за год я мог бы что-то пересмотреть.., а потом что я сам себе противоречу, основываясь на том что я писал годичной давности. Получается вам настолько хочется быть правым, что вы готовы меня осудить и за то что я не поменял точку зрения, и за то что я её поменял, одновременно. Ваш надуманный пример с длинным красным цветом я даже комментировать не буду, если до появления пространств имён у вас реально так классы назывались, то с профессиональной точки зрения, нам обсуждать нечего. А конкретно по первому примеру, если говорить о синтаксисе то без пространств название короче.
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

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

Сообщение Loveorigami »

denis909 писал(а): 2017.01.31, 16:19 а потом что я сам себе противоречу, основываясь на том что я писал годичной давности.
Писали в двух соседних постах. Что синтаксис должен быть лаконичнее и что классы должны называться более длинно, чтоб они были уникальными
denis909 писал(а): 2017.01.31, 16:19 Ваш надуманный пример с длинным красным цветом я даже комментировать не буду, если до появления пространств имён у вас реально так классы назывались, то с профессиональной точки зрения, нам обсуждать нечего.
Вот для того, чтоб так не назывались, и придумали namespace, отчасти, и в этой плоскости у нас идет беседа. А не то, как у меня называлось тогда, когда.... Именно сейчас, когда можно облегчить с namespace, вы рекомендуете усложнить и называть длинно по сути передавая путь в название.... То что я Вам дважды выделил красным.

А как по другому, если мне нужно написать редакторский виджет комментариев в админке для для темы Admin в черном стиле?
denis909 писал(а): 2017.01.31, 16:19 А конкретно по первому примеру, если говорить о синтаксисе то без пространств название короче.
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

Сообщение denis909 »

Loveorigami писал(а): 2017.01.31, 16:40 У меня так не назвались, это вы рекомендуете так называть. А как по другому, если мне нужно написать редакторский виджет комментариев в админке для для темы Admin в черном стиле?
Вы опять хотите какие-то ярлыки навесить, я уже давно в этой теме ничего никому не рекомендую. Я сделал автозагрузчик классов из глобального пространства имен, и предлагаю им воспользоваться тем кому он может быть нужен, и не пользоваться тем кому это не надо. Нравятся вам пихать в пространства имен все подряд, пихайте на здоровье.

По поводу разных тем - на мой взгляд достаточно спорное решение делать так, чтобы классы из разных тем были доступны одновременно.
Я подключаю к автозагрузчику только ту тему, которая используется в данный момент.

И кстати, даже в проектах с пространствами имен делаю также. Например: \theme\widgets\EditorComments::widget();
Последний раз редактировалось denis909 2017.01.31, 16:57, всего редактировалось 1 раз.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

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

Сообщение ElisDN »

denis909 писал(а): 2017.01.31, 16:55Я сделал автозагрузчик классов из глобального пространства имен
Для этого есть секция autoload в composer.json.
Аватара пользователя
denis909
Сообщения: 103
Зарегистрирован: 2009.04.02, 16:04
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение denis909 »

ElisDN писал(а): 2017.01.31, 16:57
denis909 писал(а): 2017.01.31, 16:55Я сделал автозагрузчик классов из глобального пространства имен
Для этого есть секция autoload в composer.json.
Увы, ваше решение не приемлемо для модульной структуры приложения.
Аватара пользователя
BrusSENS
Сообщения: 565
Зарегистрирован: 2012.07.26, 06:51
Откуда: Новороссийск
Контактная информация:

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

Сообщение BrusSENS »

denis909 писал(а): 2017.01.31, 14:32 Вы можете дружить с чем вам будет угодно, но с чем мне дружить или нет, разберусь сам.
Новички, также без вас разберуться что им нужно, а что нет, своими клеше вы только мешаете их развитию и умению принимать решения самостоятельно.
Тем более, что ваш пример с PHP7 просто несостоятелен, что-то я не припоминаю чтобы там запрещали создание и использование классов в глобальном пространстве имен, а если в PHP7 это можно,то не вижу адекватных причин почему в Yii 2.X это должно быть нельзя.
Да дружите, кто Вам запрещает?
Сообщество Yii и так состоит по большей части из джуниоров (к коим я и себя отношу), так Вы тут ещё такое используете. Не нужны NS - юзайте первую ветку.
Native Web - небольшой блог о веб разработке (временно на ремонте)
Режим обслуживания сайта для Yii 2.x.x
Аватара пользователя
denis909
Сообщения: 103
Зарегистрирован: 2009.04.02, 16:04
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение denis909 »

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

Тот факт что фреймворк - это библиотека, а приложение нет, никто в расчет не принимает.
То что в современном PHP это никто не запрещал, и использует повсеместно до сих пор, тоже в игноре.

> Не нужны NS - юзайте первую ветку.
А что не PHP4?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin »

denis909 писал(а): 2017.02.04, 14:41 Если я верно понял точку зрения большинства тут отписавшихся, то классы в глобальном пространстве использовать в своих приложениях не нужно, потому что разработчики Yii фреймворка второй версии в своем фреймворке их не используют, и поддержки для них не сделали.
нет, не так. Это вы утверждаете, что надо использовать контроллеры в корневом неймспейсе, а вам говорят, что разницы нет. Поэтому все используют в том неймспейсе, который поддерживается, а вы придумываете хаки, чтобы юзать нравящийся вам вариант.
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

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

Сообщение Onotole »

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

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

Сообщение denis909 »

zelenin писал(а): 2017.02.04, 15:03 Это вы утверждаете, что надо использовать контроллеры в корневом неймспейсе, а вам говорят, что разницы нет. Поэтому все используют в том неймспейсе, который поддерживается, а вы придумываете хаки, чтобы юзать нравящийся вам вариант.
Вы правы, изначально так и было. Когда расширение было сделано, оно включало в себя как автозагрузчик классов, так и хаки. Этот подход был в корне неверный, отчасти из-за него столько критики вышло, и я выводы сделал. Теперь оно разделено на 2 расширения, специально чтобы не путать новичков, и не смущать общественность.

1. Совершенно "чистый" автозагрузчик классов в глобальном пространстве имён, оформленный в виде кошерного расширения фреймворка(компонента), использующий настройки путей в его стиле. Совершенно обычное расширение. Его я считаю полезным, и предлагаю всем без исключения добавить себе в проекты, на случай если будет надо загрузить классы из глобального пространства имен. Это хорошее и удобное расширение, попробуйте!
https://github.com/denis909/yii2-autoload-classes

2. Набор "грязных" хаков чтобы помимо воли разработчиков фреймворка делать контроллеры в глобальном пространстве имен. Данное расширение не рекомендуется к использованию повсеместно даже мною. Оно только для тех, кто знает зачем ему это надо. Например, для быстрой миграции проекта с первой версии. Я не призываю его использовать в новых проектах.
https://github.com/denis909/yii2-global-controllers

На данный момент все мои аргументы в поддержку только первого расширения - автозагрузчика.
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

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

Сообщение Loveorigami »

denis909 писал(а): 2017.02.04, 15:39 Его я считаю полезным, и предлагаю всем без исключения добавить себе в проекты, на случай если будет надо загрузить классы из глобального пространства имен. Это хорошее и удобное расширение, попробуйте!
Вы собираетесь грузить в новый проект классы без NS ???
Покажите пример своего кода, чтоб окончательно убедить общественность в полезности расширения.

Выше ответили
viewtopic.php?f=28&t=35027&p=209750#p209498

почитайте тут (первая ссылка в Google)
http://codingexplained.com/coding/php/c ... namespaces

Так в чем разница то ????
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin »

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

Сообщение denis909 »

zelenin писал(а): 2017.02.04, 16:10
denis909 писал(а): 2017.02.04, 15:391. Совершенно "чистый" автозагрузчик классов в глобальном пространстве имён, оформленный в виде кошерного расширения фреймворка(компонента), использующий настройки путей в его стиле. Совершенно обычное расширение. Его я считаю полезным, и предлагаю всем без исключения добавить себе в проекты, на случай если будет надо загрузить классы из глобального пространства имен. Это хорошее и удобное расширение, попробуйте!
https://github.com/denis909/yii2-autoload-classes
о том и речь:
а) это никому не нужно, т.к. программисты стараются следовать стандартам, один из которых (psr-4) используется в 100% современных проектов
б) и даже если надо, вопрос решается композером на раз-два
Это достаточно спорные утверждения. Я не скажу что полностью с ними не согласен, но скажем так это не на 100% верно.

PSR-4 популярен, но он ещё не везде. И как раз чтобы подключать классы где его нет, и требуется автозагрузчик. Когда вы будете правы в этом, и действительно 100% кода будет PSR-4, то конечно же никакие автозагрузчики не понадобяться, ведь будет прочто нечего загружать.

Про composer я сразу ответил, что при модульной архитектуре приложения, это не лучшее решение. Модуль не может влиять на composer.json приложения. И после установки модуля придется composer.json менять, это неудобно. Гораздо удобнее использовать мое расширение для этой задачи! Конечно, если у вас есть такая задача.
Ответить