laravel 404页面未找到返回首页

rjee0c15  于 2022-11-18  发布在  其他
关注(0)|答案(8)|浏览(152)

我试图找出显示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);
}

如果我在浏览器中输入了错误的URL,它会返回一个空白页面。

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

在app.php中。
有人能帮助我如何显示一个404页面,如果路由未找到吗?谢谢。

h43kikqp

h43kikqp1#

我收到了500个错误而不是404个错误。我这样解决了这个问题:
在app/Exceptions/Handler.php文件中,有一个render函数。
将函数替换为以下函数:

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中的视图,依此类推。

b09cbbtk

b09cbbtk2#


〉abort方法将立即引发一个异常,该异常将由异常处理程序呈现。或者,您可以提供响应文本:

abort(403, 'Unauthorized action.');

你的app_debug设置为true吗?如果是这样的话,Laravel会抛出一个带有回溯的错误来进行调试,如果你把这个值改为false,Laravel会在错误文件夹中显示默认的404页面。也就是说,你可以在任何时候选择使用abort。在控制器级别还是在路由级别,完全取决于你。

Route::get('/page/not/found',function($closure){
  // second parameter is optional. 
  abort(404,'Page not found');
  abort(403); 
});
olmpazwi

olmpazwi3#

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

php artisan view:clear

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

pgpifvop

pgpifvop4#

您不需要检查错误类型并手动呈现404视图。Laravel已经知道使用抛出的HTTP错误代码(404 = resources/views/errors/404.blade.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"
        );
    }

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

66bbxpm55#

我在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

uurity8g

uurity8g6#

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

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

kq4fsx7k7#

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

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

在应用程序-〉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);
}
eagi6jfj

eagi6jfj8#

404页面未找到返回首页

Route::fallback(function () {
    return view('404');
});

相关问题