Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / yii2 форсированная загрузка компонентов / 16 сообщений из 16, страница 1 из 1
24.01.2017, 21:55
    #39390655
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yii2 форсированная загрузка компонентов
Всем привет.

Нарвался на принеприятнейшую особенность lazy-load от yii2. Он, оказывается, компоненты инициализирует не при загрузке приложения, а по востребованию.

А у меня есть один компонент, который при инициализации приложения должен свои правки в конфиг внести (теоретически в итоге такой компонент будет не один, а у каждого из них должна быть такая возможность).

Всё, что сейчас удалось придумать - это добавить в файл конфига следующие строки:
Код: php
1.
2.
3.
4.
5.
    'on beforeRequest' => function(){
        foreach(Yii::$app->getComponents() as $k=>$m){
            Yii::$app->get($k);
        }
    },


Ну то есть при загрузке апликухи я просто перебираю все компоненты и гружу их (просто кидаю запрос, что бы lazy-load сработал). Но это же как-то костыльно, противоестественно и даже аморально...

Есть ли какой-нить нормальный метод достичь поставленной цели (отключить лэзи лоад для некоторых компонентов)?
...
Рейтинг: 0 / 0
25.01.2017, 01:38
    #39390702
MikkiMouse
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yii2 форсированная загрузка компонентов
Програмёр,

Никогда не пользовался вашим йии, но вот же ж гуглится за пару минут - Recommended Practices from The Definitive Guide to Yii 2.0 )))
...
Рейтинг: 0 / 0
25.01.2017, 08:41
    #39390753
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yii2 форсированная загрузка компонентов
Задачу звучит абсурдно, зачем компоненту вносить правки в конфиг?
...
Рейтинг: 0 / 0
25.01.2017, 08:57
    #39390764
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yii2 форсированная загрузка компонентов
Hett,
динамический конфиг )

представляю как приятно такое дебажить
...
Рейтинг: 0 / 0
25.01.2017, 12:08
    #39390938
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yii2 форсированная загрузка компонентов
MikkiMouseПрограмёр,

Никогда не пользовался вашим йии, но вот же ж гуглится за пару минут - Recommended Practices from The Definitive Guide to Yii 2.0 )))

Мда. За подсказку большое спасибо... Теперь буду знать, что не всё что bootstrap относится к Bootstrap :-) (могли бы уж уникальное название придумать для термина, что бы не путать)

Но в моём случае неприменимо похоже. Дело в том, что я создаю не экстеншены, а модули... и устанавливаться эти модули будут не через композер. Это будет cms с собственной системой управления модулями (все другие методы установки с использованием сторонних сервисов были отброшены как неудобные для конечного пользователя)
...
Рейтинг: 0 / 0
25.01.2017, 12:16
    #39390953
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yii2 форсированная загрузка компонентов
r uHett,
динамический конфиг )

представляю как приятно такое дебажить

Всё норм. Конфиги не будут меняться, они будут дописываться. В данном случае такое понадобилось потому, что при установке модуль должен подменять стандартный класс User на свой. А при удалении должен вернуть всё как было. И что бы не возникало проблем с "как было", я не переписываю сам конфиг при установке модуля, а просто прокидываю компонент, который при каждом запуске вносит необходимые для своего модуля коррективы.

Соответственно модуля нет - никто никакие коррективы не вносит (то есть достигнуто состояние "как было" до установки)
...
Рейтинг: 0 / 0
25.01.2017, 12:21
    #39390962
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yii2 форсированная загрузка компонентов
авторпри установке модуль должен подменять стандартный класс User на свой
Зачем это?
...
Рейтинг: 0 / 0
25.01.2017, 12:27
    #39390969
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yii2 форсированная загрузка компонентов
HettЗадачу звучит абсурдно, зачем компоненту вносить правки в конфиг?

Не следует цепляться именно к тому, что я конфиг меняю :) ... Мне надо подписаться на события других модулей например. А для этого мне также при старте приложения надо запустить свой компонент, который все подписки оформит.

Просто в этом случае мне понадобилось внести правки в конфиг, но решение поставленной задачи в принципе решает очень много вопросов.

Из-за чего свой способ я считаю костыльным - потому что он без разбора прогрузит все компоненты объявленные в системе. Во избежание этого можно было бы такие "автозагружаемые" компоненты унаследовать от отдельного класса со свойством autoLoad и перед загрузкой компонентов проверять значится ли в их конфиге это свойство. Но и это мне кажется не лучшим решением, потому что разработка усложняется неоправданно сильно (лишние правила по наследованию). Надеялся что в yii уже есть настройка, позволяющая отключить lazy-load для некого компонента, и я просто не могу её найти.
...
Рейтинг: 0 / 0
25.01.2017, 12:43
    #39390992
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yii2 форсированная загрузка компонентов
авторИз-за чего свой способ я считаю костыльным - потому что он без разбора прогрузит все компоненты объявленные в системе.

Костылем он является потому, что заменяет класс User =)
...
Рейтинг: 0 / 0
25.01.2017, 12:45
    #39390998
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yii2 форсированная загрузка компонентов
В чем проблема навесить ивенты на нужные модели?
http://www.yiiframework.com/doc-2.0/guide-concept-events.html
...
Рейтинг: 0 / 0
25.01.2017, 14:35
    #39391169
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yii2 форсированная загрузка компонентов
HettавторИз-за чего свой способ я считаю костыльным - потому что он без разбора прогрузит все компоненты объявленные в системе.

Костылем он является потому, что заменяет класс User =)

Ну не... костылём оно становится не из-за этого. User - это класс, которые реализует IdentityInterface. Соответственно вполне логично, что модуль "users" подменяет этот класс на свой, потому как именно он поставляет нужные модели для работы с пользователями

Hett, при всём уважении к тебе, я считаю что ты просто не вник в саму суть вопроса.
А насчёт ивэнтов... Я так понимаю это ответ на "Мне надо подписаться на события других модулей например"... Так я не совсем понимаю каким образом ответ связан с вопросом. :)) Подписку то кто-то оформить должен. Я же не могу перехватить событие, если не был на него ранее подписан. Или это предложение, что модели одного модуля могли бы сами подписаться на события моделей другого модуля? Если да, то это неприемлемо, потому что по задумке модули должны связываться в одной точке (через один интерфейс)... Иначе если понадобится что-то от чего-то отвязать, это вызовет уйму проблем и часы поиска по всему модулю на факт наличия каких либо остаточных связей.
...
Рейтинг: 0 / 0
25.01.2017, 14:54
    #39391194
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yii2 форсированная загрузка компонентов
а почему компонент лезет в конфиг приложения, пуст приложение берет конфиг компонента и вмерживает его в свой при инициализации.
...
Рейтинг: 0 / 0
25.01.2017, 14:56
    #39391201
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yii2 форсированная загрузка компонентов
Да это я уже про замену класса.
В Yii1 была опция prelaod.

https://github.com/yiisoft/yii2/blob/master/docs/guide/structure-applications.md#yiibaseapplicationbootstrapbootstrap-

bootstrap - оно?
...
Рейтинг: 0 / 0
25.01.2017, 17:14
    #39391359
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yii2 форсированная загрузка компонентов
SharuPoNemnoguа почему компонент лезет в конфиг приложения, пуст приложение берет конфиг компонента и вмерживает его в свой при инициализации.

А разница? :) Результат будет тем же... Но только расширяемость подхода будет ниже... Потому что есть то, что невозможно реализовать через изменения конфига, а потому в любом случае в итоге понадобится метод, который сможет завершить начатое :)
...
Рейтинг: 0 / 0
25.01.2017, 17:19
    #39391366
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yii2 форсированная загрузка компонентов
HettДа это я уже про замену класса.
В Yii1 была опция prelaod.

https://github.com/yiisoft/yii2/blob/master/docs/guide/structure-applications.md#yiibaseapplicationbootstrapbootstrap-

bootstrap - оно?
Во... вот это похоже оно. Немного позже (сегодня) попробую и отпишусь сюда. Спасибо :)

P.S. Про bootstrap мне ещё MikkiMouse писал, но там как-то хитро было всё завёрнуто через composer.json (ну то есть туда как-то композер ещё притянули)...
...
Рейтинг: 0 / 0
28.01.2017, 14:31
    #39393745
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yii2 форсированная загрузка компонентов
К сожалению никак не мог к этой задаче подобраться. Наконец-то случилось :)

Всё работает, спасибо!
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / yii2 форсированная загрузка компонентов / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]