Debug - uniqcle/Bitrix GitHub Wiki
Все исключения D7 наследуются от встроенного в PHP класса \Exception
, который присутствует в PHP начиная с версии 5.1.
У данного класса есть не переопределяемые методы getMessage()
, getCode()
, getFile()
, getLine()
, getTrace()
, getTraceAsString()
, а так же переопределяемый метод __toString()
.
Готовые классы исключений Bitrix Framework
\Exception
Bitrix\Main\SystemException - базовый класс всех системных исключений
\Bitrix\Main\IO\IoException - базовый класс всех исключений файлового ввода-вывода
\Bitrix\Main\IO\FileDeleteException - исключение при удалении файла
\Bitrix\Main\IO\FileNotFoundException - отсутствие требуемого файла
\Bitrix\Main\IO\FileOpenException - исключение при открытии файла
\Bitrix\Main\IO\InvalidPathException - не корректный путь
\Bitrix\Main\IO\FileNotOpenedException - файл не открыт
\Bitrix\Main\Config\ConfigurationException - ошибка в конфигурации
Bitrix\Main\Security\SecurityException - ошибка безопасности
\Bitrix\Main\Security\Sign\BadSignatureException - исключения ошибок подписи.
\Bitrix\Main\ArgumentException - базовый класс исключений, связанных с входящими параметрами методов
\Bitrix\Main\ArgumentNullException - параметр должен быть не пустым
\Bitrix\Main\ArgumentOutOfRangeException - параметр вне допустимого диапазона
\Bitrix\Main\ArgumentTypeException - параметр не допустимого типа
\Bitrix\Main\DB\Exception - базовый класс для исключений БД
\Bitrix\Main\DB\ConnectionException - исключение при соединении
\Bitrix\Main\DB\SqlException - исключение при выполнении запроса
\Bitrix\Main\NotSupportedException - вызывается, если функционал не поддерживается
\Bitrix\Main\NotImplementedException - вызывается, если функционал должен поддерживаться, но пока не реализован
\Bitrix\Main\ObjectPropertyException - исключение выводится когда свойства объекта не валидны.
\Bitrix\Main\ObjectNotFoundException - выводит исключение когда объект не существует.
\Bitrix\Main\ObjectException - исключение выводится, если объект не может быть создан.
\Bitrix\Main\LoaderException - исключение в загрузчике
Настройка обработки исключений производится в файле
.setting.php
...
'exception_handling' =>
array (
'value' =>
array (
'debug' => true,
'handled_errors_types' => 4437,
'exception_errors_types' => 4437,
'ignore_silence' => false,
'assertion_throws_exception' => true,
'assertion_error_type' => 256,
'log' => NULL,
),
'readonly' => false,
),
...
$path=$this->GetPath()."/install/components";
if(\Bitrix\Main\IO\Directory::isDirectoryExists($path))
CopyDirFiles($path, $_SERVER["DOCUMENT_ROOT"]."/bitrix/components", true, true);
else
throw new \Bitrix\Main\IO\InvalidPathException($path);
Own Exceptions
local/modules/uniqcle.d7/lib/divisionerror.php
namespace Uniqcle\D7;
class DivisionError extends \Bitrix\Main\SystemException {
protected $param1;
protected $param2;
public function __construct($type = 'division by zero', $param1 = 0, $param2 = 0, \Exception $prev = null)
{
$message = 'An error has occured: '. $type;
$this->param1 = $param1;
$this->param2 = $param2;
parent::__construct($message, false, false, false, $prev);
}
public function getParam1(){
return $this->param1;
}
public function getParam2(){
return $this->param2;
}
}
local/modules/uniqcle.d7/lib/division.php
namespace Uniqcle\D7;
class Division{
public static function divided($param1 = 0, $param2 = 0){
if($param2 === 0)
throw new \Uniqcle\D7\DivisionError('Деление на ноль', $param1, $param2);
return $param1/$param2;
}
}
local/modules/uniqcle.d7/install/components/uniqcle/d7.exception/division.php
use \Bitrix\Main,
\Bitrix\Main\Loader,
\Bitrix\Main\Localization\Loc;
use \Uniqcle\D7\Division;
class D7Exception extends CBitrixComponent
{
protected function checkModules(){
if(!Loader::includeModule('uniqcle.d7'))
throw new \Bitrix\Main\LoaderException(Loc::getMessage('UNIQCLE_D7_MODULE_NOT_INSTALLED'));
}
public function var1(){
// return Division::divided(4,2);
return Division::divided(4,0);
}
public function executeComponent(){
try{
$this->includeComponentLang('class');
$this->checkModules();
$this->arResult = $this->var1();
$this->includeComponentTemplate();
} catch(\Uniqcle\D7\DivisionError $e) {
ShowError($e -> getMessage());
var_dump($e -> getParam1());
var_dump($e -> getParam2());
}
}
}