在 PHP 中显示多条异常消息

Displaying multiple exception messages in PHP

所以我正在制作这个登录应用程序,但在注册时无法显示正确的错误消息。我希望抛出所有异常,而不仅仅是“try...catch”-method.

中的一个异常

这是设置:

// EXTENDED EXCEPTION CLASSES
class AException extends Exception {

  public function __construct($message = null, $code = 0) {
      echo $message;
  }
}
class BException extends Exception {

  public function __construct($message = null, $code = 0) {
      echo $message;
  }
}

// INDEX.PHP

try {

    $register = new RegisterController();

} catch (AException | BException $e) {

  $e->getMsg();
}

我有几个可能触发异常的因素,我希望所有异常都被触发和捕获,例如如果注册表格是空的,应该有一个用户名为空的例外,另一个密码为空的例外等等。

class RegisterController {
    public function __construct() {
    if (!empty($_POST)) {
        $this->checkUserInput();
        $this->checkPassInput();
    }
}

//... executing code

private function checkUserInput() {
    if (strlen($_POST['username']) < 3) { // check character length bigger than 3
        throw new \AException("Username has too few characters.");
    }
}

private function checkPassInput() {
    if (strlen($_POST['password']) < 3) { // check character length bigger than 3
        throw new \BException("Password has too few characters.");
    }
}
}

那么,如何使我的“try...catch”方法回显抛出的异常?可能吗?

现在只显示第一个抛出的异常消息,所以我想我需要找到一些方法让脚本在抛出异常后继续...

P.S。进一步澄清:如果注册表格张贴时输入字段为空,例如用户名和密码输入均为空,我希望代码回显两个异常消息,"Username has too few characters." 和 "Password has too few characters."。

这不是 try/catch 机制的工作原理。它并不是要向最终用户报告通知,而是要在发生意外情况时以编程方式采取行动。

你想要的是一个简单的表单验证:

class RegisterController {
    public $errors = [];

    public function __construct() {
    if (!empty($_POST)) {
        $this->checkUserInput();
        $this->checkPassInput();
    }

    private function checkUserInput() {
        if (strlen($_POST['username']) < 3) { // check character length bigger than 3
            $this->errors[] = "Username has too few characters.";
        }
    }

    private function checkPassInput() {
        if (strlen($_POST['password']) < 3) { // check character length bigger than 3
            $this->errors[] = "Password has too few characters.";
        }
    }
}

然后你可以使用类似的东西:

$register = new RegisterController();
if (!empty($register->errors)) {
    foreach ($register->errors as $error) {
        echo '<div class="error">' . $error . '</div>';
    }
}