Я пришел к этому из-за того, что Propel соединял Symfony 1.0 в течение нескольких лет. Возможно, я не полностью понял ваш пост, но я не уверен, чего, по вашему мнению, не хватает в Propel.
Для ясности, то, что вы называете моделью, я бы назвал "бизнес-логикой" или "действием". Модель, по крайней мере, как я понимаю жаргон, - это база данных и слой классов поверх базы данных. Ваши «взгляды» по-прежнему являются частью IMO в разделе логики / действий в MVC. Я бы рассматривал представление как официально ссылающееся на что-то другое: выходной слой, который отображает результат действия.
В Propel у вас есть три класса для каждой таблицы: строка, одноранговый узел и запрос (исторически пользователи Propel привыкли к двум, поскольку запрос является новым). Строка проста - просто представление класса строки базы данных. Пир предназначен для операций в масштабе всей таблицы, таких как выбор нескольких строк, а класс запросов - это новый цепочечный API для выполнения операторов в базе данных.
Итак, в каждом из ваших действий (вход в систему, выход из системы и т. Д.) Вы должны вызывать Propel для выполнения необходимой работы. Если вы обнаружите, что в вашем действии имеется большой кусок кода, в большинстве случаев он может быть реорганизован в строку или узел Propel. Это согласуется с эмпирическим правилом MVC «тонкие контроллеры, толстые модели», т. Е. Постарайтесь сохранить тонкие данные в контроллере.
Как вы должны структурировать свой проект, зависит от вашей структуры, но я бы показал это так:
RegistrationController - which uses the
UserAction - which in turn should call something like
LoginAction (rendered by LoginView)
LogoutAction (rendered by LogoutView)
SignupAction (rendered by SignupView)
ProfileAction (rendered by ProfileView)
- each of which access the model UserModel