Własna strona błędu 404 w Kohanie
Ostatnio odkryłem prawdziwy "pałer" frameworków. Zacząłem od CodeIgnitera. Całkiem fajny, w większości miejsc daje wolną rękę programiście. Jednak nie wygląda na to, żeby miał być dalej tworzony. Spróbowałem Kohanę, jedną (to ona jest?
) z jego forków.
Jako że dosłownie zakohałem się w Kohanie, będę co jakiś czas umieszczał tutaj jakieś porady.
Porada na dziś:
Własna strona błędu 404 w Kohanie
Wbrew pozorom nie jest to takie trudne! Kohana (tak jak CodeIgniter) ma zaimplementowany system tak zwanych Hooków/Eventów (zdarzeń). Mogę zmienić standardową funkcję obsługi błędu 404, i podmienić ja na moją własną.
Na początku musimy się upewnić, czy mamy w naszej aplikacji włączone hooki. W tym celu otwieramy plik application/config/config.php, i prawdopodobnie w linijce 75 będzie znajdować się poniższy kod:
$config['enable_hooks'] = FALSE;
Zmieniamy FALSE na TRUE.
Następnie tworzymy nowy plik application/hooks/error_404.php. Kohana automatycznie wykonuje wszystkie pliki z katalogu application/hooks/, więc nie musimy go jakoś specjalnie włączać ![]()
W tym pliku zadeklarujemy klasę przechwytywania błędu (error_404), oraz podmienimy standardową funkcję obsługi błędu 404, na naszą własną z klasy error_404. Nasza funkcja będzie uruchamiać inny, podany w stałej, kontroler.
<?php
class error_404 {
const error_controller = 'Error404'; // Nazwa kontrolera który chcemy wykonywać podczas błędu. (jeżeli mamy kontroler np. w pliku application/controllers/errors/Error404.php, wpisujemy tutaj errors/Error404)
public static $page = '';
public static function show_404() { // nasza funkcja przechwytująca błąd 404
header("HTTP/1.0 404 Not Found"); // wysyłamy nagłówek ze statusem Not Found.
if(Router::$current_uri != self::error_controller) { // zabezpieczenie, przed zapętleniem się strony, gdy podany kontroler obsługi błędu nie zostanie znaleziony
self::$page = Router::$current_uri; // zapisujemy adres brakującej strony, więc możemy w kontrolerze strony błędu wyświetlić jej adres
Router::$current_uri = self::error_controller; // Przekierowujemy na nasz kontroler
Router::setup(); // i ponownie inicjalizujemy klasę Router.
} else {
Kohana::show_404(self::$page); // gdy nasz kontroler obsługi błędu nie istnieje, wyświetlamy standardową tablicę z Kohany, z adresem strony wcześniej zapisanej do zmiennej $page.
}
}
}
Event::replace('system.404', array('Kohana', 'show_404'), array('error_404', 'show_404')); // Podmieniamy standardową funkcję obsługi eventu "system.404", na naszą.
?>
Potem musimy zdefiniować nasz kontroler w pliku application/controllers/Error404.php. Nie będzie on się różnił specjalnie od innych, więc nie będę się tutaj specjalnie rozpisywał:
<?php
class Error404_Controller extends Controller {
public function index() {
echo '<html><body><b>404 Not Found</b><small> - '.error_404::$page.'</small><br /><br /><small>Powered by KohanaPHP</small></body></html>';
}
}
?>
Stay tuned, następne tutoriale już niedługo!
“Nie jestem twoim chłopcem” – o prostytucji w internecie
Ostatnio poczułem się w internecie jakbym był żywym towarem na sprzedaż. A to za sprawą naszego rodzimego Facebooka - naszej-klasy.
Otóż pierwotnie założenia i wykonanie n-k pokrywały się z moimi oczekiwaniami. Nie było zbędnych funkcji, większych ograniczeń. Jednak z czasem portal społecznościowy, za przeproszeniem, zeszmacił się. Zaczęło przybywać reklam, np. takie wbudowane Allegro. Po co to komu?!
Uznałem, że w dobie Facebooka i świetnego Twittera nie potrzebuję konta na naszej-klasie i je usunąłem. Doszedłem do wniosku, że jestem towarem na sprzedaż. Ja jestem dla serwisu, nie serwis dla mnie. Z kolei serwis dla kasy. Dziękuję, postoję.
Z innej beczki: Harry Potter does Bananaphone!