user4147717
user4147717

Reputation:

laravel 5 custom 404

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.

Upvotes: 33

Views: 42167

Answers (9)

bijayalaxmi mohanty
bijayalaxmi mohanty

Reputation: 1

You need to create errors folder inside resources/views and place your 404.blade.php file inside errors folder.

It will do the work. you do not need to edit handler.php file inside App/Exception folder.

Upvotes: 0

darshan
darshan

Reputation: 373

set for Particulier prefix and with custom condition

Route::fallback(function(Request $request) {
    if($request->is('practitioner/*')) {
        return response()->view('errors.practitioner-404', [], 404);
    } else if( $request->is('patient/*') ) {
        return response()->view('errors.patient-404', [], 404);
    } else {
        abort(404);
    }
});

Upvotes: 0

Stevie B
Stevie B

Reputation: 31

I was looking for an answer to something else but thought I'd help in case someone else is looking for this.

run the command php artisan vendor:publish you will see all publishable files. type in the number for laravel-errors the error files are then published to resources/views/errors folder

Upvotes: 1

stillatmylinux
stillatmylinux

Reputation: 1429

Lavavel 5.8

Create a file in resources/views/errors/404.blade.php and add this code.

@extends('errors::minimal')

@section('title', __('Not Found'))
@section('code', '404')

@if($exception)
    @section('message', $exception->getMessage())
@else
    @section('message', __('Not Found'))
@endif

Then in your controller you can use:

abort(404, 'Whatever you were looking for, look somewhere else');

Upvotes: 2

Kent Aguilar
Kent Aguilar

Reputation: 5338

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.

Upvotes: 2

Mehrdad Hedayati
Mehrdad Hedayati

Reputation: 1454

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

Upvotes: 5

jeremykenedy
jeremykenedy

Reputation: 4285

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','.*');

Upvotes: 3

Hayk Aghabekyan
Hayk Aghabekyan

Reputation: 1087

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);
}

Upvotes: 15

JNsites
JNsites

Reputation: 631

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.

Upvotes: 63

Related Questions