前言:以下文字大小适中,因为我试图最大限度地为其他读者提供类似的、基本的和概念性问题的价值。
介绍
目前我正在开发一个基于 Web 的事件管理工具,它使用 Laravel MVC 框架来维护适当的应用程序结构并简化开发。
该应用程序的目标是
- 提供一种有效的方式来创建(分别是 CRUD)事件
- 邀请注册用户参加这些活动
- 允许用户确认他们参与之前创建的活动
遵循 MVC 模式,我创建了
- 一个名为的模型
Event
- 一个
EventController
- 多个视图
- 静态
event
视图,显示已经存在的事件 - 用于创建和编辑的表单视图,名为
eventForm
eventIndex
, 所有事件的列表
- 静态
到目前为止,一切似乎都相对简单,但是当我尝试实现更多功能以允许用户确认他们参与特定活动时,我遇到了设计问题。
更多详细信息
为了进一步说明,每个Event
都有许多属性(有些省略):
- 标题
- 描述
- 多个
EventDate
s,由以下属性组成:- 标题
- 时间跨度(例如 09-20-2013 09:00 AM 到 09-20-2013 05:00 PM)
前面提到EventDate
的也是一个带有关联数据库表的模型。
通过用户登录的帐户来区分,我为所有视图和控制器提供了一个布尔变量,用于通过以下方式$admin
更改视图:event
- $admin = true:视图是静态页面,显示
Event
s属性和EventDate
s在一个表中 - $admin = false:此外,视图对于每个
EventDate
表格行都有一个隐藏的表单和按钮,允许用户确认或拒绝他们对每个表格EventDate
的参与
使用变量和-blocks 来改变视图对我来说似乎是可以接受的,因为尽管有隐藏形式,但用户模式和管理模式@if...@endif
之间的差异非常小。
问题
现在,我遇到的问题如下:
谁负责处理 User-Mode 隐藏表单的 POSTed 数据?
首先,这里有几个事实来说明目前的发展状况:
该
Event
控制器目前提供以下功能:/* CRUD functions */ public function CreateEvent() public function ShowEvent($id) public function UpdateEvent($id) public function DeleteEvent($id) /* Form display helpers */ public function NewEvent() public function EditEvent()
- Model与
EventDate
Model 是分开的Event
,因为 aEvent
有多个EventDate
s - 确认存储在每个用户和
EventDate
绑定到EventDateConfirmation
模型的另一个单独的表中
解决方法
这些是我的想法:
,
EventController
必须使用诸如此类的方法进行扩展CreateEventDateConfirmation()
,从而导致多个CRUD方法甚至不属于该控制器,因为它们不直接与模型相关,并且表Event
中根本没有发生任何变化events
在一个单独的
EventDateConfirmationController
,只负责获取和设置EventDateConfirmation
模型数据,有两种使用可能性:通过使用有点笨重的
EventDateConfirmationControler
方法从EventController
Controller::resolve(DEFAULT_BUNDLE,'EventDateConfirmationController')->CreateConfirmation($params);
- 将响应隐藏表单 POST-request 的路由
EventDateConfirmationController
直接设置为对应的动作
第一种可能性的缺点是以令人不快的方式调用外部控制器,这对我来说似乎是错误的,当表单还包含直接属于事件的数据并因此必须由
Event
控制器处理时,第二种可能性是不切实际的??
在我看来,#1 和 #2 都不是解决问题的好方法,因为它们似乎是 hack-ish 并且不太适合 MVC 模式。
有哪些可用的替代方案,这将是解决此问题的干净方法?
先感谢您!