2011-01-13 5 views
1

Я хотел бы получить некоторые отзывы о моей архитектуре. Мой проект Zend Framework содержит несколько модулей и модули, которые мы создаем. Это немного отличается от стандартного ZF-приложения, поскольку несколько модулей могут создавать одну страницу. Например, страница контактов состоит из текста детали (текстового модуля) и контактной формы (контактного модуля). Или на странице с тремя столбцами есть три текстовых модуля, работающих на одной странице. Пока все хорошо (все это отлично работает).Рекомендации по архитектуре ZF admin

интерфейс администратора

Теперь наш администратор. В интерфейсе администратора мы редактируем одну страницу (а не один модуль!), Что затрудняет ее работу. Одна страница может иметь один или несколько экземпляров Zend_Form. Например, текст может быть отредактирован с помощью текстового поля, форма контакта - с некоторыми полями ввода. Они должны отображаться в представлении как подформы большего экземпляра Zend_Form. Также должен отображаться html (просмотр скриптов), например, для перечисления статей или проектов блога из портфеля. Не все модули «администрируются» (например, наша карта сайта, ничего не нужно настраивать), но тем, кто есть, необходимо поддерживать создание, обновление и удаление.

Текущая архитектура

Сейчас мы работаем с услугами. Легко проверить (существует класс Portfolio_Service_Admin и реализует ли он Admin_Service_AdminInterface?). Но портфель уже усложняется: услуга действует как своего рода контроллер и поддерживает создание, обновление и удаление портфеля, а также CRUD портфельных категорий и CRUD портфельных проектов (в одном классе!).

Если это не ясно, я могу добавить больше информации о нашем текущем подходе

Что же тогда?

Поскольку служба действует теперь как своего рода контроллер, я думал о контроллерах (duh). Единственным недостатком является то, что контроллеру необходимо вернуть форму, чтобы добавить эту форму модуля в качестве подформы большей формы (и не добавленной к ответу!). Кроме того, несколько модулей на одной странице приводят к множеству итераций диспетчерского прохода, что не очень эффективно.

Итак: есть ли у вас какие-либо предложения, как контролировать это?

+0

Значит, в вашей области администратора при редактировании страницы, где Zend_Form с множеством субформ подает? У вас есть какой-то контроллер страниц, который достаточно интеллектуальный, чтобы пройти через подформы и делегировать каждую часть в соответствующий модуль? –

+0

Да, все работает уже с моим сервисом (и, вероятно, не изменится, если я смогу наконец использовать новый метод). Admin_Service_Form принимает Application_Model_Page, поэтому служба знает, какие модули находятся на странице. Затем, следовательно, всем моделям предлагается вернуть форму, если они, конечно, администрируются. И после POST служба снова вызывает модули, чтобы принять их изменения. Даже 18n реализовано :) –

ответ

0

Я хотел бы вернуться к этому сейчас. Мы начали работу с нашим новым ZF2 (CMF) (решение для управления контентом) и решили проблему (хотя в то же время у нас было другое решение).

Страницы и модули теперь подключены 1: 1. Это делает его намного проще для администратора, поскольку он может просто прокси-запросы к соответствующему модулю. Это будет выпущено как с открытым исходным кодом, поэтому, возможно, в ближайшем будущем я прокомментирую этот ответ со ссылкой на github.

1

Я считаю, что вы сбиваете с толку модули MVC и то, что вы называете «Модулями страниц». Похоже, вам нужен один модуль и несколько моделей.

Pages_Model_Page имеет много Pages_Model_Module. Каждый, Pages_Model_Module, имеет одну форму (Pages_Form_Module_ *) и метод getForm() для получения формы для модуля. В getForm() вы можете создать новый экземпляр формы «Модуль» и заполнить его данными для «Модуля».

На «странице», получите «Модули», поместите каждую форму в виде подформы в стандартную Zend_Form, а затем перейдите к View. По представлению повторите выше, чтобы создать форму, затем подтвердите. Если они действительны, пройдите через каждый модуль и примените изменения.

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

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