是否应将异常用于表单验证


Should exceptions be used for form validation?

这可能是一个n00bish问题,但不管怎样。可以使用异常进行表单验证吗?假设我有一个表格,询问用户的姓名和电子邮件,这样做对吗?

try {
    if (empty($_POST["name"])) {
        throw new UserRegistrationException("Your name cannot be empty.");
    }
    if (filter_var($_POST["email"])) {
        throw new UserRegistrationException("Invalid email");
    }
    // Save new user into database
} catch (UserRegistrationException $e) {
    // Show errors on screen
}

此外,如果这实际上是正确的方法,如果用户提交了一个空名称和一封无效电子邮件,这两个异常是执行还是只执行最先出现的一个(本例中为名称)?

顺便说一下,我正在使用PHP。

我个人喜欢对任何应该停止或改变程序流的事情使用异常。换句话说,如果某个特定字段的验证改变了数据的处理方式,或者需要重复该过程,那么我总是使用异常来处理错误。

如果它很琐碎,或者我只是在编译一个错误消息列表,那么我不会触发异常。

为了回答问题,不能同时抛出两个异常。到达的第一个throw语句将被抛出。这并不是说,有时将重新思考作为另一种类型的异常是没有意义的。

异常的用例适用于异常条件。在这种情况下,您希望用户名和密码字段为空吗?如果你正在显示一个web表单,我认为,是的,你确实需要空白的用户名和密码字段,所以你应该明确检查这个条件,而不是抛出异常。

为了回答您的特定问题,如果遇到错误,将不会抛出这两个异常。throw语句将把程序发送到catch块中。从那里控制将正常流动。