// обработчик
<?php
namespace core\libs;
use Error;
use Throwable;
class ErrorHandler
{
private static $handler_name;
private static $file;
private static $line;
public static function error($code, $message, $file, $line)
{
self::$handler_name = __FUNCTION__;
self::$file = $file;
self::$line = $line;
throw new Error($message, $code);
}
public static function throwable(Throwable $throwable)
{
$handler = self::$handler_name ?? __FUNCTION__;
$message = $throwable->getMessage();
$file = self::$file ?? $throwable->getFile();
$line = self::$line ?? $throwable->getLine();
$code = $throwable->getCode();
if ($code != 404) {
$code = 500;
}
http_response_code($code);
if (DEBUG) {
require_once WWW . '/errors/debug.php';
} else {
$log_date = date('d-m-Y');
$log_time = date('H:i:s');
$log_file = ROOT . "/tmp/logs/{$code}/{$log_date}.log";
$log_message = "[{$log_time}] Ошибка {$code}: {$message} | Файл: {$file} | Строка {$line}\n----------\n";
error_log($log_message, 3, $log_file);
require_once WWW . "/errors/{$code}.html";
}
die();
}
}
// подключение
spl_autoload_register(function ($class) {
$file = ROOT . '/' . str_replace('\\', '/', $class) . '.php';
if (is_file($file)) {
require_once $file;
}
});
define('DEBUG', true);
set_error_handler('core\libs\ErrorHandler::error');
set_exception_handler('core\libs\ErrorHandler::throwable');
// ШАБЛОН для примера
echo 'Шаблон<br>' . $content; // $content содержит вид из буфера
// ВИД для примера 1
echo $a;
// Результат
// Сработал обработчик: error
// Ошибка 500: Undefined variable: content
// Файл: D:\voynushka.osp\app\views\App\home.php
// Строка: 2
// ВИД для примера 2
echo $a = 1;
// Результат
// Шаблон
// 1
Почему при ошибке в виде выбрасывает ошибку в шаблоне - мол не определена переменная для вида?