在 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>';
}
}
所以我正在制作这个登录应用程序,但在注册时无法显示正确的错误消息。我希望抛出所有异常,而不仅仅是“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>';
}
}