2015-05-11 9 views
2

В структуре Yii PHP у вас есть возможность создавать модули. Согласно официальной документации Yii здесь является definition из module:Как правильно использовать модули Yii?

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

Предположим, что у нас есть огромное приложение, и нам нужно создать интерфейс и бэкэнд. В этом случае лучше создать frontend module и backend module и использовать их, или лучше внедрить интерфейс как одно приложение Yii и бэкэнд в качестве второго приложения Yii.

Я спрашиваю об этом, потому что если вы посмотрите на Yii's 2 advance template, там три разных приложения (common, backend, frontend), но они не реализованы как три разных модуля, и почему мой вопрос?

Является ли приложение медленнее при использовании модулей и какие плюсы и минусы использования модулей?

+0

Я поместил свои модули в общие \ модули. Затем у меня есть BackendController и FrontendController. Это разделяет действия и представления. – Alex

ответ

3

Yii2 advance template имеет 3 разных приложения, однако они являются интерфейсом, бэкэнд и консолью (не распространены).

лучше ли создать модуль интерфейса и использовать модуль и использовать их?

Ответ «это зависит». Давайте возьмем несколько примеров:

  1. У меня есть раздел «пользователи» в бэкэнд, который сообщает системе, что каждый пользователь может изменить в бэкэнд. Я использую это в нескольких приложениях без каких-либо изменений, поэтому я создал пользовательский модуль, который я могу просто вставить туда, где захочу. Это самый простой модуль, потому что я никогда не использую его для интерфейса.
  2. модуль блога, модуль блога немного сложнее, поскольку он имеет место для управления блогом (эта часть находится в бэкэнд), а сообщения и комментарии, показанные в переднем разделе (эта часть должна быть в интерфейсе). Однако я все же хочу иметь возможность подключать его в нескольких приложениях. Мое решение состояло в том, чтобы создать некоторые папки в реальном модуле (я фактически создал ту же структуру frontend/backend/common). Логика такая же, на моем интерфейсе веб-сайта я использую то, что вы находите в папке с интерфейсом модуля, общий содержит те вещи, которые я использую как в интерфейсе, так и в бэкэнде (например, некоторые модели) и т. Д. В другом приложении будет использоваться тот же интерфейсные контроллеры/виджеты, но убедитесь, что вы разрешаете просматривать виды.

Ответ на использование или отсутствие использования модулей - это тот же ответ на вопрос «Я буду использовать это в других приложениях и могу ли он работать без остальной части приложения?» Модуль НЕ должен быть тесно связан с остальной частью приложения.

0

Идея модулей в том, что они почти автономны. На этапе разработки приложения вы должны выделить из него все автономные элементы. Например, у меня большой CRM.Мне нужен пользовательский модуль (включая все модели, связанные с пользователем, контроллеры, компоненты и их конфигурацию - например, правила маршрутов). Существует также административный модуль. Имеется CRM-модуль и модуль для расписания корпоративных мероприятий и собраний. И около 3-5 независимых модулей - например, внутренний модуль связи, модуль контроля доступа и модуль электронных платежей. Удобство состоит в том, что все модули являются автономными. У них есть свои MVC-наборы, наборы виджетов и конфигураций. И они могут быть перемещены из одного проекта в другой без особых усилий.

Вот еще одна интересная модульная система: Есть ресурсы с различной функциональностью. Его можно разделить на модули. Каждый файл модуля должен реализовывать модульный интерфейс (вам нужно написать его). Например, я хочу, чтобы каждый модуль предоставлял свой собственный виджет для меню. (Выпадающий список или только кнопка) и собственный виджет для панели инструментов. Также в файле модуля указан доступ к различным действиям и т. Д.

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

Смежные вопросы