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.phpOdchudzony 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.