Модули

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Re: Модули

Сообщение Faenir »

zelenin писал(а):непонятно, что вы хотите. Что значит "приходится выбирать". Наследуйте как хотите от чего хотите. В чем проблема?
И вообще зачем вам нужно так усложнять?
В это то и проблема, что не могу наследовать, как хочу) Я не хочу ничего усложнять, просто пытаюсь сделать правильно, что бы соответствовало структуре advanced: полностью независимые фронтенд/бэкенд + общее в common + модуль разбитый на 3 директории.

Хочу использовать независимые базовые классы Module, что бы все модули бэкенда наследовались от базового модуля бэкенда, а все модули фронтенда наследовались от базового модуля фронтенда, и эти два базовых модуля наследовались от общего базового модуля в common. С этим проблем нет, все прекрасно наследуется. Проблема в использовании именно модуля в common.
Если я делаю модульФронтенда -> базовыйМодульФронтенда -> базовыйМодульCommon -> Yii - то сам модуль в common вообще не используется.
Если я делаю модульФронтенда -> модульCommon -> базовыйМодульCommon -> Yii - то не используется разделение базовых модулей на фронтенд/бэкенд - все идет через один базовыйМодульCommon, что я считаю не есть правильно.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Модули

Сообщение zelenin »

Если я делаю модульФронтенда -> базовыйМодульФронтенда -> базовыйМодульCommon -> Yii - то сам модуль в common вообще не используется.
это проблема?
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Re: Модули

Сообщение Faenir »

zelenin писал(а):
Если я делаю модульФронтенда -> базовыйМодульФронтенда -> базовыйМодульCommon -> Yii - то сам модуль в common вообще не используется.
это проблема?
А разве нет? Что если в модуле будут методы, которые будут использоваться и на фронтенде и на бэкенде? Если делать так, то придется дублировать их и на фронтенд и на бэкенд... заместо того что бы просто разместить в common. Собственно теряется весь смысл advanced структуры, разве нет?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Модули

Сообщение zelenin »

MrArthur писал(а):
zelenin писал(а):
Если я делаю модульФронтенда -> базовыйМодульФронтенда -> базовыйМодульCommon -> Yii - то сам модуль в common вообще не используется.
это проблема?
А разве нет? Что если в модуле будут методы, которые будут использоваться и на фронтенде и на бэкенде? Если делать так, то придется дублировать их и на фронтенд и на бэкенд... заместо того что бы просто разместить в common. Собственно теряется весь смысл advanced структуры, разве нет?
а, я кажется понял.
вам наверное нужно так:
backend->baseBackend->common->baseCommon->yiiModule
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Re: Модули

Сообщение Faenir »

zelenin писал(а):а, я кажется понял.
вам наверное нужно так:
backend->baseBackend->common->baseCommon->yiiModule
Всё верно. Это то, что я и пытаюсь реализовать)
Только проблема в том, что "common" в данной цепочке - это модуль в папке common/modules, который может меняться.
Т.е. для backend/modules/user/User - это будет common/modules/user/User, а для backend/modules/blog/Blog- уже common/modules/blog/Blog.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Модули

Сообщение zelenin »

MrArthur писал(а):
zelenin писал(а):а, я кажется понял.
вам наверное нужно так:
backend->baseBackend->common->baseCommon->yiiModule
Всё верно. Это то, что я и пытаюсь реализовать)
Только проблема в том, что "common" в данной цепочке - это модуль в папке common/modules, который может меняться.
Т.е. для backend/modules/user/User - это будет common/modules/user/User, а для backend/modules/blog/Blog- уже common/modules/blog/Blog.
и что?
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Re: Модули

Сообщение Faenir »

zelenin писал(а):и что?
А то, что я в baseBackend не знаю от чего мне его наследовать. Это не будет конкретным файлом, зависит от модуля-родителя.
Потому что его надо наследовать от common/modules/{НАЗВАНИЕ_МОДУЛЯ_РОДИТЕЛЯ}/{НАЗВАНИЕ_КЛАССА_МОДУЛЯ}.
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Модули

Сообщение lynicidn »

смысл адванцед структуры потеряется, когды вы наплодите сущностей. И тут вы узнаете про контейнеры :)
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Модули

Сообщение zelenin »

MrArthur писал(а):
zelenin писал(а):и что?
А то, что я в baseBackend не знаю от чего мне его наследовать. Это не будет конкретным файлом, зависит от модуля-родителя.
Потому что его надо наследовать от common/modules/{НАЗВАНИЕ_МОДУЛЯ_РОДИТЕЛЯ}/{НАЗВАНИЕ_КЛАССА_МОДУЛЯ}.
вы собираетесь динамически наследовать или что? К чему весь этот геморой?
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Re: Модули

Сообщение Faenir »

lynicidn писал(а):смысл адванцед структуры потеряется, когды вы наплодите сущностей. И тут вы узнаете про контейнеры :)
С контейнерами, к сожалению, не знаком. И так сейчас приходится по ходу осваивать все эти компосеры/неймспейсы и т.д. + еще фреймворк изменился сильно, приходится в нем еще разбираться... так что пока не до контейнеров)
zelenin писал(а):вы собираетесь динамически наследовать или что? К чему весь этот геморой?
Я не знаю, как еще объяснить, что я хочу.. Вроде уже расписал подробно) Я не собирался ничего динамически наследовать, просто к этому все пришло.

Придется походу делать frontendModule -> commonModule -> commonBaseModule -> Yii.
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Модули

Сообщение lynicidn »

зачем commonBase? почему все в комон не завернуть? Ми тоже так сначала делал, типа комонБейз это вообще общий, а коммон это общий для "веб", но думаю это лишнее :)
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Модули

Сообщение vova07 »

Ситуация которую вы описываете вводит в тупик не только advanced струтуру, но и все остальные. Исходя из реальных примеров и нужд, могу сказать что данную ситуацию можно решить через "trait", так как динамическая подключение свойст практически не нужна, а функционал обретет желаемый вид.

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

backend->backendModule->['extends' => common->baseModule, 'trait' => 'backend->baseModule']
Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Re: Модули

Сообщение Faenir »

vova07, возможно этот вариант подходит, но пока не работал с ними. Я в самом начале еще спрашивал, не подойдут ли traits для этого)

Вообщем решил пока оставить: backendModule -> commonModule -> commonModuleBase -> Yii. Выкинул разделение базовых модулей на фронтенд/бэкенд.
Если будут проблемы, буду разбираться с примесями...

Спасибо всем за помощь!
andipas
Сообщения: 25
Зарегистрирован: 2012.01.24, 07:39

Re: Модули

Сообщение andipas »

Выбрал basic не понимаю в чем особое преимущество advanced.

Насколько большим должен быть проект, чтобы разделение на 3 части, стало удобней? И в чем оно такое удобство заключается, когда надо прыгать по папкам в проекте.

На мой взгляд удобней, когда все близко и не раскидано по папкам и меньше зависимостей. Скопировал папку модуля, добавил его в конфиг - все работает.

В basic сделал так:

modules/module_name/controllers - контроллеры frontend
modules/module_name/controllers/backend - контроллеры backend
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Модули

Сообщение zelenin »

andipas писал(а):Выбрал basic не понимаю в чем особое преимущество advanced.

Насколько большим должен быть проект, чтобы разделение на 3 части, стало удобней? И в чем оно такое удобство заключается, когда надо прыгать по папкам в проекте.

На мой взгляд удобней, когда все близко и не раскидано по папкам и меньше зависимостей. Скопировал папку модуля, добавил его в конфиг - все работает.

В basic сделал так:

modules/module_name/controllers - контроллеры frontend
modules/module_name/controllers/backend - контроллеры backend
мне например удобнее проект любой сложности делать на advanced.
Ответить