@bedolazhka

Почему обработчик не видит ошибки вида и «подставляет» шаблон?

// обработчик
<?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


Почему при ошибке в виде выбрасывает ошибку в шаблоне - мол не определена переменная для вида?
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
не определена переменная для вида?
По тому что она не определена? Я не вижу где вы ее определяете и даете ей значение. Либо это происходит выше по коду, но в каких-то условиях есть ошибка и она не получает значение, либо она определяется в другой области видимости, либо вообще никак не определена.

Элементарный var_dump($content) мог бы вам помочь, но почему-то вы его не сделали.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы