5

前言:以下文字大小适中,因为我试图最大限度地为其他读者提供类似的、基本的和概念性问题的价值。


介绍

目前我正在开发一个基于 Web 的事件管理工具,它使用 Laravel MVC 框架来维护适当的应用程序结构并简化开发。

该应用程序的目标是

  • 提供一种有效的方式来创建(分别是 CRUD)事件
  • 邀请注册用户参加这些活动
  • 允许用户确认他们参与之前创建的活动

遵循 MVC 模式,我创建了

  • 一个名为的模型Event
  • 一个EventController
  • 多个视图
    • 静态event视图,显示已经存在的事件
    • 用于创建和编辑的表单视图,名为eventForm
    • eventIndex, 所有事件的列表

到目前为止,一切似乎都相对简单,但是当我尝试实现更多功能以允许用户确认他们参与特定活动时,我遇到了设计问题。

更多详细信息

为了进一步说明,每个Event都有许多属性(有些省略):

  • 标题
  • 描述
  • 多个EventDates,由以下属性组成:
    • 标题
    • 时间跨度(例如 09-20-2013 09:00 AM 到 09-20-2013 05:00 PM)

前面提到EventDate的也是一个带有关联数据库表的模型。

通过用户登录的帐户来区分,我为所有视图和控制器提供了一个布尔变量,用于通过以下方式$admin更改视图:event

  • $admin = true:视图是静态页面,显示Events属性和EventDates在一个表中
  • $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与EventDateModel 是分开的Event,因为 aEvent有多个EventDates
  • 确认存储在每个用户和EventDate绑定到EventDateConfirmation模型的另一个单独的表中

解决方法

这些是我的想法:

  1. EventController必须使用诸如此类的方法进行扩展CreateEventDateConfirmation(),从而导致多个CRUD方法甚至不属于该控制器,因为它们不直接与模型相关,并且表Event中根本没有发生任何变化events

  2. 在一个单独的EventDateConfirmationController,只负责获取和设置EventDateConfirmation模型数据,有两种使用可能性:

    • 通过使用有点笨重的EventDateConfirmationControler方法从EventController

      Controller::resolve(DEFAULT_BUNDLE,'EventDateConfirmationController')->CreateConfirmation($params);
      
    • 将响应隐藏表单 POST-request 的路由EventDateConfirmationController直接设置为对应的动作

    第一种可能性的缺点是以令人不快的方式调用外部控制器,这对我来说似乎是错误的,当表单还包含直接属于事件的数据并因此必须由Event控制器处理时,第二种可能性是不切实际的

  3. ??

在我看来,#1 和 #2 都不是解决问题的好方法,因为它们似乎是 hack-ish 并且不太适合 MVC 模式。

有哪些可用的替代方案,这将是解决此问题的干净方法?

先感谢您!

4

1 回答 1

0

我认为您可能可以执行 #2 并使其不那么骇人听闻,但仍然不必与以前相比有太大变化。否则我认为#1 不是一个好的选择。

实际上,如果我在您的情况下,我会做的是创建 EventDateConfirmationController 并在用户模式视图中,使其成为异步 ajax 的单独表单。当用户单击[假设]他/她将要进行的复选框时,或者在他们提交其他表单时提交表单。

我绝对觉得 javascript 可以帮助您保持代码一致并且仍然像 MVC 一样。

于 2013-11-11T23:21:41.287 回答