I have create my own 404 error handler editing laravel 4's /app/start/global.php
file as below:
App::error(function(Exception $exception, $code)
{
Log::error($exception);
if (Config::get('app.debug')) {
return;
}
switch ($code)
{
case 403:
case 404:
case 500:
$view = App::make('PublicController')->callAction('error', array($code));
$response = Response::make($view, $code);
return $response;
break;
default:
return Response::view('errors.default', array(), $code);
break;
}
});
-
Because of the use a template library, I must delagate the view style across a specific controller. So, I get a nice style with this line:
$view = App::make('PublicController')->callAction('error', array($code));
-
Because of the application needs a status code for browser request, I build it with
Response::make
using the html view rendered as Response's content and then, return it:$response = Response::make($view, $code); return $response;
The workflow follows the thread really good and the 404 html view is showed correctly according to the layout, the 404 status is set also good. But, what's the problem here? well.. for some reason, there is an "echo" at html output, like below:
HTTP/1.0 200 OK
Cache-Control: no-cache
Date: Tue, 08 Apr 2014 18:21:44 GMT
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
...
If you note, there is a message at the beginning:
HTTP/1.0 200 OK Cache-Control: no-cache Date: Tue, 08 Apr 2014 18:21:44 GMT
Looks like Response::make
function has an echo
within, because if I do:
$view = App::make('PublicController')->callAction('error', array($code));
return $view;
... the message disapears, but I do not like this answer because I need to use Response
class in order to set the status code. How can I dealing with this?