Debug - uniqcle/Bitrix GitHub Wiki

GitHub

\Exception

Все исключения 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,
  ),

Exceptions in Modules/Components

...
$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());
        }
    }
}

Courses

List
⚠️ **GitHub.com Fallback** ⚠️