Dziś postanowiłem na własnej skórze zbadać jak mocno się zmieniło to środowisko. I jak się okazuje jest kilka zmian:
Wywołanie widoku
//3.0 $this->request->response = $view; //3.1 $this->response->body($view);
Wyłapywanie błędu 404
W wersji 3.0 obsługa wyjątku odbywała się w bootstrap.php i wyglądała mniej więcej tak:
try { $request->execute(); } catch (Exception $e) { // if its not valid, it gets caught here $request->status = 404; $request->response = View::factory('errors/404'); }
W wersji 3.1 wygląda to zupełnie inaczej. W bootstrap.php dodajemy jedynie jedną linijkę kodu (koniecznie za Kohana::init()):
set_exception_handler(array('Kruzar_Exception_Handler', 'handle'));oraz tworzymy klasę Kruzar_Exception_Handler:
class Kruzar_Exception_Handler { public static function handle(Exception $e) { switch (get_class($e)) { case 'HTTP_Exception_404': $response = new Response; $response->status(404); $view = View::factory('errors/404'); $view->title = 'ERROR 404 - nie ma takiej strony'; $view->message = $view->title; $view->message .= $e->getMessage(); echo $response->body($view)->send_headers()->body(); return TRUE; break; default: return Kohana_Exception::handler($e); break; } } }i umieszczamy w /application/classes/kruzar/exception/handler.php
Odchudzony bootstrap.php
Już na przykładzie powyżej widać optymalizację kodu w bootstrap. Zmiany w tym pliku są większe - część kodu związana z uruchomieniem została przeniesiona do pliku index.php. W bootstrap tylko konfigurujemy śrosowisko - podejście bardzo fajne. :-)
Execution Time
W wersji 3.0 miałem informację (pod zdjęciami) o tym jaki jest czas generowania strony. W związku ze zmianami kawałek kodu który za to odpowiadał nieco trzeba było zmienić i przenieść do pliku index.php:
//zamiast echo Request::factory() ->execute() ->send_headers() ->body(); //piszemy coś takiego: $request = Request::factory(); $request->execute(); if ($request->response()->body()) { $total = array( '{memory_usage}' => number_format((memory_get_peak_usage() - KOHANA_START_MEMORY) / 1024, 2).'KB', '{execution_time}' => number_format(microtime(TRUE) - KOHANA_START_TIME, 2).' s.'); $request->response()->body(strtr((string) $request->response(), $total)); } echo $request->response()->send_headers()->body();
To zmiany, przez które dziś przebrnąłem - szerszą informację o zmianach można znaleźć tutaj.
Hej, w linijce:
OdpowiedzUsuń07 case 'HTTP_Exception_404':
w przykładzie do wyłapywania błędu powinno być "Http' dużymi literami nie dziala, przynajmniej u mnie.