是否应将例外用于表单验证?

时间:2012-04-02 02:22:34

标签: php exception exception-handling validation

这可能是个棘手的问题,但无论如何。可以使用异常进行表单验证吗?假设我有一个表格要求用户提供他们的姓名和电子邮件,是否可以执行以下操作?

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:4)

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

如果它是微不足道的,或者我只是编译错误消息列表,那么我不会触发异常。

要回答问题,不能同时抛出两个例外。将抛出第一个throw语句。这并不是说有时将重新抛出作为另一种例外是没有意义的。