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