From 9152c0bdc8e23ca0ff03c72c5891d3db9c5e9d4f Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 9 Feb 2009 07:12:08 -0500 Subject: [PATCH] First steps to using exceptions for error handling Added two exception classes: one for client errors (= user can fix) and one for server errors (only admin or coder can fix). The web entry point now tries to catch exceptions and show them in the browser. The main code for showing errors in Action class now throws an exception and lets top-level handle it. --- lib/clientexception.php | 56 +++++++++++++++++++++++++++++++++++++++++ lib/serverexception.php | 55 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 lib/clientexception.php create mode 100644 lib/serverexception.php diff --git a/lib/clientexception.php b/lib/clientexception.php new file mode 100644 index 0000000000..3020d7f506 --- /dev/null +++ b/lib/clientexception.php @@ -0,0 +1,56 @@ +. + * + * @category Exception + * @package Laconica + * @author Evan Prodromou + * @copyright 2008 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +if (!defined('LACONICA')) { + exit(1); +} + +/** + * Class for client exceptions + * + * Subclass of PHP Exception for user errors. + * + * @category Exception + * @package Laconica + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +class ClientException extends Exception +{ + public function __construct($message = null, $code = 400) { + parent::__construct($message, $code); + } + + // custom string representation of object + public function __toString() { + return __CLASS__ . ": [{$this->code}]: {$this->message}\n"; + } +} diff --git a/lib/serverexception.php b/lib/serverexception.php new file mode 100644 index 0000000000..b8ed6846e7 --- /dev/null +++ b/lib/serverexception.php @@ -0,0 +1,55 @@ +. + * + * @category Exception + * @package Laconica + * @author Evan Prodromou + * @copyright 2008 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +if (!defined('LACONICA')) { + exit(1); +} + +/** + * Class for server exceptions + * + * Subclass of PHP Exception for server errors. The user typically can't fix these. + * + * @category Exception + * @package Laconica + * @author Evan Prodromou + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ + +class ServerException extends Exception +{ + public function __construct($message = null, $code = 400) { + parent::__construct($message, $code); + } + + public function __toString() { + return __CLASS__ . ": [{$this->code}]: {$this->message}\n"; + } +}