Dalej poznajemy OOP i MVC w PHP. Poprawiamy klasę ErrorController, którą napisaliśmy w poprzednim odcinku. Do dzieła.

Chcemy, aby jeden plik error.php obsługiwał nam wszystkie błędy:

<?php 
echo "<h1>{$code} - {$msg}</h1>";
die;

Spróbujmy w tym samym folderze napisać coś takiego:

<?php 
extract(['code' => 403, 'msg' => 'Unauthorized Access']);
require __DIR__ . "/error.php";

Jak widać extract wypakowuje nam zmienne o nazwach podanych w kluczach i zawartości podanej w wartościach tych kluczy.

Za pomocą require i magicznej zmiennej DIR odnosimy się do pliku error.php z danego folderu, który robi za nas resztę.

Pozostaje tylko napisać klasę ErrorController:

<?php 
class ErrorController {
    private function __construct(){}

    public static function error($resposne_code, $message){
        http_response_code($resposne_code);
        extract(['code' => $resposne_code, 'msg' => $message]);

        if(file_exists(__DIR__ . "/error.php"))
        {
            require __DIR__ . "/error.php";
        }
        else {
            die($message);
        }
            
    }
}

ErrorController::error(404, "Not Found");

Ustawiamy kod odpowiedzi, dokonujemy ekstrakcji zmiennych pod nazwami odpowiadającymi tym z pliku error.php, sprawdzamy czy ten plik istnieje.

Jeżeli istnieje – to go załączamy. Jeżeli nie – korzystamy z die z wiadomością taką jak ma $message, z kodem odpowiedzi już ustawionym.

Ten kod jest dużo lepszy od poprzedniego. Nie musimy tworzyć osobnych plików dla każdego błędu. Możemy nawet utracić jakoś plik error.php a i tak jako takie działanie mamy zabezpieczone.

Do następnego razu!