1

我有一个包含两个字段来上传文件的表单。我需要执行以下几点:

  • 验证表格;
  • 将文件移动到另一个目录;
  • 处理移动的文件;
  • 返回处理结果。

如果上述几点失败,我也必须返回错误消息。我很困惑如何更灵活地做到这一点。我不想在控制器中做所有事情。

我在 FOSUserBundle 中创建了表单处理程序、表单模型、表单类型,并在validation.yml 中为表单模型添加了验证规则。表单验证工作正常。

我有一个想法使用事件调度程序来解决这个问题。表单验证后,我可以通知事件侦听器。

你怎么看?

4

1 回答 1

2

这取决于。

如果您需要订阅事件,因为您需要执行不同的操作(例如,通过电子邮件发送支持、清理垃圾、在数据库中写下失败日志),请使用事件调度程序。但如果它是一个简单的事情,比如只显示一个错误,那么使用异常来代替是有意义的:

if ($form->isValid()) { 
    try { 
        $entity->handle(); 
    } catch (FileHandleException $e) { 
        ... 
    } catch (RuntimeException $e) {
        ... 
    }
}

另一个选项取决于“处理移动的文件”是什么。如果它是验证的一部分(例如,处理它们以发现它们是有效的 ssh 密钥)而不是业务逻辑,那么您可以创建一个新的验证器,它将成为表单验证的一部分。

于 2012-09-14T21:03:12.983 回答