如果在Laravel 5.1中找不到路线,则显示404页面

时间:2015-08-25 04:06:37

标签: php laravel laravel-5.1

如果找不到路线,我试图找出未找到404页面。我遵循了很多教程,但它没有用。 我在404.blade.php

中有\laravel\resources\views\errors

同样在handler.php

public function render($request, Exception $e)
{
    if ($e instanceof TokenMismatchException) {
        // redirect to form an example of how i handle mine
        return redirect($request->fullUrl())->with(
            'csrf_error',
            "Opps! Seems you couldn't submit form for a longtime. Please try again"
        );
    }

    /*if ($e instanceof CustomException) {
        return response()->view('errors.404', [], 500);
    }*/

    if ($e instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException)
        return response(view('error.404'), 404);

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

如果我在浏览器中输入错误的网址,则会返回空白页面。我有

'debug' => env('APP_DEBUG', true),

在app.php。

如果找不到路线,有人可以帮我如何显示404页面吗?谢谢。

5 个答案:

答案 0 :(得分:21)

我收到了500个错误,而不是404个错误。我解决了这个问题:

在app / Exceptions / Handler.php文件中,有一个渲染函数。

用此功能替换该功能:

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

            // not authorized
            case '403':
                return \Response::view('errors.403',array(),403);
                break;

            // not found
            case '404':
                return \Response::view('errors.404',array(),404);
                break;

            // internal error
            case '500':
                return \Response::view('errors.500',array(),500);
                break;

            default:
                return $this->renderHttpException($e);
                break;
        }
    } else {
        return parent::render($request, $e);
    }
}

然后,您可以使用保存在views / errors / 404.blade.php中的视图,等等。

答案 1 :(得分:5)

@ tester.Your问题已经解决,请在composer中尝试以下命令:

php artisan view:clear

然后使用未知网址再次尝试。因为我之前也遇到过同样的错误。

答案 2 :(得分:1)

我在app / Exceptions / Handler.php(Laravel 5.2)中使用以下内容:

/**
 * Render an exception into an HTTP response.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Exception  $e
 * @return \Illuminate\Http\Response
 */
public function render($request, Exception $e)
{
    if ($e instanceof \ReflectionException OR $e instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException) //Si la ruta no existe, mostar view 404.
        return response(view('errors.404'), 404);
    return parent::render($request, $e);
}

它看起来像这样:img

答案 3 :(得分:0)

在apache中,您可以将此代码放在主目录的.htaccess文件中,并确保在httpd confg文件中将AllowOverride指令更改为all

ErrorDocument 404 the\path\to\404.blade.php

答案 4 :(得分:0)

在配置文件夹 app.php 中更改以下代码

'debug' => env('APP_DEBUG', true),

在 App->Exception->Handler.php 中用下面的代码替换渲染函数

public function render($request, Exception $exception)
{
    
    if ($exception instanceof ModelNotFoundException) 
    {
    return response()->view('errors.404', [], 404);
    }

    
    if ($exception instanceof \ErrorException) {
    return response()->view('errors.500', [], 500);
    } 
    else {
    return parent::render($request, $exception);
    }
    return parent::render($request, $exception);
}