laravel 5 custom 404

被刻印的时光 ゝ 提交于 2019-12-18 18:39:57

问题


This is driving me crazy. I'm working with Laravel 5 and it appears that the docs for 4.2 and generating 404 pages does not work.

First, there is no global.php so I tried putting the following in routes.php:

App::missing(function($exception)
{
    return Response::view('errors.missing', array(), 404);
});

This results in an error "method missing() not found"

Debug is set to false.

I've searched and searched but so far have found no information on setting 404 pages in Laravel 5. Would appreciate any help.


回答1:


Go to resources/views/errors and create a 404.blade.php file with what you want on your 404 page and Laravel takes care of the rest.




回答2:


if you want to have some global solution, you can do changes in /app/Exceptions/Handler.php by adding code bellow

public function render($request, Exception $e)
{
    if ($this->isHttpException($e)) {

        $statusCode = $e->getStatusCode();

        switch ($statusCode) {

            case '404':
                return response()->view('layouts/index', [
                    'content' => view('errors/404')
                ]);
        }
    }
    return parent::render($request, $e);
}



回答3:


In Laravel 5 you could simply put a custom 404.blade.php under resources/views/errors and that's it. For other errors like 500 you could try the following in your app/Exeptions/Handler.php:

public function render($request, Exception $e)
{

    if ( ! config('app.debug') && ! $this->isHttpException($e)) {
        return response()->view('errors.500');
    }

    return parent::render($request, $e);
}

And do the same for 500 HTTP Exeptions




回答4:


I like the case statement approach but it has some issues going levels deep.

However, this catches all errors:

Route::any('/{page?}',function(){
  return View::make('errors.404');
})->where('page','.*');



回答5:


Laravel 5 already has a pre-defined render method(line 43) under app/Exceptions/Handler.php. Simply insert the redirection code before parent::render. Like so,

public function render($request, Exception $e)
{
    if ($e instanceof ModelNotFoundException) 
    {
        $e = new NotFoundHttpException($e->getMessage(), $e);
    }

    //insert this snippet
    if ($this->isHttpException($e)) 
    {
        $statusCode = $e->getStatusCode();
        switch ($statusCode) 
        {
            case '404': return response()->view('error', array(), 404);
        }
    }

    return parent::render($request, $e);
}

Note: My view is under resources/views. You can somehow put it anywhere else you want.



来源:https://stackoverflow.com/questions/26394017/laravel-5-custom-404

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!