MakeUserError - вывести сообщение разработчика об ошибке в программируемом модуле или сформировать пользовательское исключение.

Функция MakeUserError предназначена для того, чтобы вывести сообщение об ошибке при написании сценария для сайта на PHP. Она постоянно используется для сообщений разработчика в текстах библиотек прикладных функций и классов TPhpPrown и TPhpTools. Параметры функции позволяют исполнителю представить текст информационного сообщения в текущей позиции сайта либо сформировать исключение и выбросить текст в отдельной странице, прервав работу сайта, но оставляя возможность вернуться на исходную страницу.

Информационное сообщение из разрабатываемого программного модуля при возникновении ошибочной ситуации выводится в одном из четырёх режимов:

в режиме rvsCurrentPos просто выводится сообщение в текущей позиции сайта. Данный режим используется при тестировании модулей;

в режиме по умолчанию rvsTriggerError вызывается исключение с пользовательской ошибкой через trigger_error($Message,$errtype), где $Message - текст сообщения, $errtype может быть одним из значений E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE, E_USER_DEPRECATED. По умолчанию E_USER_ERROR;

в режиме rvsMakeDiv предполагается, что ошибка произошла в php-коде до разворачивания html-страницы и, в этом случае, формируется дополнительный блок сообщения div с идентификатором id="Ers";

в режиме rvsDialogWindow разворачивается сообщение в диалоговом окне с помощью JQueryUI. В этом случае на вызывающем сайте должны быть подключены модули jquery, jquery-ui, jquery-ui.css, например от Microsoft:

<link rel="stylesheet" type="text/css"
   href="https://ajax.aspnetcdn.com/ajax/jquery.ui/1.10.3/themes/ui-lightness/jquery-ui.css">
<script
   src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.2.min.js">
</script>
<script
   src="https://ajax.aspnetcdn.com/ajax/jquery.ui/1.11.2/jquery-ui.min.js">
</script>

Функция MakeUserError выделяет два вида ошибок (контроллируемые и неконтроллируемые) и определяет их следующим образом:

а) ошибка является контроллируемой в случае, когда известно в каком месте сайта она может возникнуть и, таким образом, сообщение об ошибке можно вывести на экран по разметке сайта;

б) в остальных случаях ошибка является неконтроллируемой и вывод сообщения об ошибке выполняется на отдельной странице;

в) по умолчанию функция генерирует неконтроллируемую ошибку/исключение: trigger_error ($Message, E_USER_ERROR), предполагая на верхнем уровне обработку ошибки через сайт doortry.ru.

Синтаксис

MakeUserError($Mess,$Prefix='TPhpPrown',$Mode=0,$errtype=E_USER_ERROR,$div='Ers')

Параметры

$Mess    - текст сообщения об ошибке/исключении;
$Prefix  - префикс сообщения, указывающий на программную систему, в модуле которой возникла ошибка/исключение;
$Mode    - режим вывода сообщений: rvsCurrentPos, rvsTriggerError, rvsMakeDiv, rvsDialogWindow;
$errtype - тип ошибки/исключения: E_USER_ERROR,E_USER_WARNING,E_USER_NOTICE,E_USER_DEPRECATED;
$div     - имя div-а для сообщения в режимах rvsMakeDiv,rvsDialogWindow. По умолчанию 'Ers'.

Возвращаемое значение

$Result=true, если сообщение сформировано без ошибок

Зарегистрированные ошибки/исключения

define ("WrongTypeError", "Неверно указан тип ошибки");
<?php namespace prown;

// PHP7/HTML5, EDGE/CHROME                            *** MakeUserError.php ***
// ****************************************************************************
// * TPhpPrown     Вывести сообщение разработчика об ошибке в программируемом *
// *                      модуле или сформировать пользовательское исключение *
// *                                                                          *
// * v1.5, 27.08.2021                              Автор:       Труфанов В.Е. *
// * Copyright © 2019 tve                          Дата создания:  17.02.2019 *
// ****************************************************************************

require_once "iniConstMem.php";

// ****************************************************************************
// *       Развернуть сообщение в диалоговом окне  с помощью JQueryUI         *
// ****************************************************************************
function MakeMode2($Mess,$Prefix,$div)
{
   
$title="Сообщение  [".$Prefix."]";
   echo 
'<div id="'.$div.'" title="'.$title.'">';
   echo 
$Mess;
   echo 
"</div>";
?>
<script>
   $(document).ready(function(){
      $('#<?php echo $div?>').dialog
      ({
         width: 600,
         position: 'left top',
         show: {effect:'slideDown'},
         hide: {effect:'explode', delay:250, duration:1000, easing:'easeInQuad'}
      });
   });
</script>
<?php
}
// ****************************************************************************
// *                    Cгенерировать ошибку/исключение или                   *
// *                  просто сформировать сообщение об ошибке                 *
// ****************************************************************************
function MakeUserError($Mess,$Prefix='TPhpPrown',$Mode=rvsTriggerError,$errtype=E_USER_ERROR,$div='Ers')
{
   
$Result=true;
   
$Message='['.$Prefix.'] '.$Mess;
   if (
$Mode==rvsCurrentPos)
   {
      echo 
$Message;
   } 
   else if (
$Mode==rvsMakeDiv)
   {
      echo 
'<div id="'.$div.'">'.$Message.'</div>';
   } 
   elseif (
$Mode==rvsDialogWindow)
   {
      
MakeMode2($Mess,$Prefix,$div);
   } 
   elseif (
$Mode==rvsReturn)
   {
      
$Result=$Message;
   } 
   else
   {
      
// Выдаем исключение с сообщением об ошибке
      
$Result=trigger_error($Message,$errtype);
      
// Выдаем исключение, если неверно указан тип ошибки
      
if ($Result==false)
      {
         
trigger_error($Prefix.': '.WrongTypeError,$errtype);
      }   
   }
   return 
$Result
}
// ****************************************************** MakeUserError.php ***


Сообщения выполненного теста функции


MakeUserError

[Test] Сообщение в текущей позиции сайта
prown\MakeUserError("Сообщение в текущей позиции сайта",'Test',$Mode); ................... Сообщение в режиме $Mode=rvsCurrentPos
[Test] Сообщение в дополнительном div-е
MakeUserError("Сообщение в дополнительном div-е",'Test',$Mode,E_USER_ERROR,"Err"); ....... Сообщение в режиме $Mode=rvsMakeDiv

1/1 test cases complete: 2 passes, 0 fails and 0 exceptions.