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!