Browse Source
This allows differentiating specific and general exceptions in tests; a library-wide trap would have to trap AbstractExceptionmicrosub
J. King
7 years ago
7 changed files with 66 additions and 59 deletions
@ -0,0 +1,60 @@ |
|||
<?php |
|||
declare(strict_types=1); |
|||
namespace JKingWeb\NewsSync; |
|||
|
|||
abstract class AbstractException extends \Exception { |
|||
|
|||
const CODES = [ |
|||
"Exception.uncoded" => -1, |
|||
"Exception.invalid" => 1, // this exception MUST NOT have a message string defined |
|||
"Exception.unknown" => 10000, |
|||
"Lang/Exception.defaultFileMissing" => 10101, |
|||
"Lang/Exception.fileMissing" => 10102, |
|||
"Lang/Exception.fileUnreadable" => 10103, |
|||
"Lang/Exception.fileCorrupt" => 10104, |
|||
"Lang/Exception.stringMissing" => 10105, |
|||
"Db/Exception.extMissing" => 10201, |
|||
"Db/Exception.fileMissing" => 10202, |
|||
"Db/Exception.fileUnusable" => 10203, |
|||
"Db/Exception.fileUnreadable" => 10204, |
|||
"Db/Exception.fileUnwritable" => 10205, |
|||
"Db/Exception.fileUncreatable" => 10206, |
|||
"Db/Exception.fileCorrupt" => 10207, |
|||
"Db/Update/Exception.tooNew" => 10211, |
|||
"Db/Update/Exception.fileMissing" => 10212, |
|||
"Db/Update/Exception.fileUnusable" => 10213, |
|||
"Db/Update/Exception.fileUnreadable" => 10214, |
|||
"Db/Update/Exception.manual" => 10215, |
|||
"Db/Update/Exception.manualOnly" => 10216, |
|||
"Conf/Exception.fileMissing" => 10302, |
|||
"Conf/Exception.fileUnusable" => 10303, |
|||
"Conf/Exception.fileUnreadable" => 10304, |
|||
"Conf/Exception.fileUnwritable" => 10305, |
|||
"Conf/Exception.fileUncreatable" => 10306, |
|||
"Conf/Exception.fileCorrupt" => 10307, |
|||
"User/Exception.functionNotImplemented" => 10401, |
|||
"User/Exception.doesNotExist" => 10402, |
|||
"User/Exception.alreadyExists" => 10403, |
|||
"User/Exception.authMissing" => 10411, |
|||
"User/Exception.authFailed" => 10412, |
|||
"User/Exception.notAuthorized" => 10421, |
|||
]; |
|||
|
|||
public function __construct(string $msgID = "", $vars = null, \Throwable $e = null) { |
|||
if($msgID=="") { |
|||
$msg = "Exception.unknown"; |
|||
$code = 10000; |
|||
} else { |
|||
$class = get_called_class(); |
|||
$codeID = str_replace("\\", "/", str_replace(NS_BASE, "", $class)).".$msgID"; |
|||
if(!array_key_exists($codeID, self::CODES)) { |
|||
throw new Exception("uncoded"); |
|||
} else { |
|||
$code = self::CODES[$codeID]; |
|||
$msg = "Exception.".str_replace("\\", "/", $class).".$msgID"; |
|||
} |
|||
$msg = Lang::msg($msg, $vars); |
|||
} |
|||
parent::__construct($msg, $code, $e); |
|||
} |
|||
} |
Loading…
Reference in new issue