首页 文章

为Laravel 5创建自定义404视图

提问于
浏览
1

无论我做什么,我都无法将404页面绑定到Laravel的处理程序 .

这就是我的handler.php的样子:

//app/Exceptions/handler.php
public function render($request, Exception $e)
    {   
        if($this->isHttpException($e))
        {

            switch ($e->getStatusCode()) {
                // not found
                case 404:
                    return \Response::view('errors.404',404);
                break;
                // internal error
                case '500':
                    return \Response::view('errors.500',500);   
                break;

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

在我的控制器中,我渲染视图如下:

render view($request)

其中$ request是uri .

我在/ views / errors /下添加了404.blade.php,但仍然得到Laravel的标准调试错误页面: Whoops, looks like something went wrong .

dumping $this->isHttpException($e) 返回false bolean

这是整个日志

[2015-06-05 20:41:30] local.ERROR: exception 'InvalidArgumentException' with message 'View [contact] not found.' in /Users/username/Desktop/folderone/folder2/vendor/compiled.php:12898
Stack trace:
#0 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(12871): Illuminate\View\FileViewFinder->findInPaths('contact', Array)
#1 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(12996): Illuminate\View\FileViewFinder->find('contact')
#2 /Users/username/Desktop/folderone/folder2/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php(565): Illuminate\View\Factory->make('contact', Array, Array)
#3 /Users/username/Desktop/folderone/folder2/app/Http/Controllers/PageController.php(14): view('contact')
#4 [internal function]: App\Http\Controllers\PageController->show('contact')
#5 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(8287): call_user_func_array(Array, Array)
#6 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(8354): Illuminate\Routing\Controller->callAction('show', Array)
#7 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(8333): Illuminate\Routing\ControllerDispatcher->call(Object(App\Http\Controllers\PageController), Object(Illuminate\Routing\Route), 'show')
#8 [internal function]: Illuminate\Routing\ControllerDispatcher->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#9 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(8952): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#10 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#11 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(8935): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#12 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(8334): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#13 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(8320): Illuminate\Routing\ControllerDispatcher->callWithinStack(Object(App\Http\Controllers\PageController), Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request), 'show')
#14 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(7317): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request), 'App\\Http\\Contro...', 'show')
#15 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(7288): Illuminate\Routing\Route->runWithCustomDispatcher(Object(Illuminate\Http\Request))
#16 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(6954): Illuminate\Routing\Route->run(Object(Illuminate\Http\Request))
#17 [internal function]: Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#18 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(8952): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#19 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#20 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(8935): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#21 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(6955): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#22 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(6944): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#23 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(6929): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#24 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(1935): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#25 [internal function]: Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#26 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(8952): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#27 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(2438): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#28 /Users/username/Desktop/folderone/folder2/app/Http/Middleware/VerifyCsrfToken.php(17): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#29 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(8944): App\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#30 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(12083): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#31 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(8944): Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#32 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(10785): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#33 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(8944): Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#34 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(11789): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#35 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(8944): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
#36 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(11738): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#37 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(8944): Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure))
#38 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(2478): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#39 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(8944): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
#40 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#41 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(8935): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#42 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(1891): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#43 /Users/username/Desktop/folderone/folder2/vendor/compiled.php(1880): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#44 /Users/username/Desktop/folderone/folder2/public/index.php(53): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#45 /Users/username/Desktop/folderone/folder2/server.php(21): require_once('/Users/nashdelo...')
#46 {main}

2 回答

  • 1

    除了在 views/errors 中创建一些模板文件之外,您不必编写任何代码,例如

    laravel/resources/views/errors/404.blade.php
        laravel/resources/views/errors/500.blade.php
        laravel/resources/views/errors/403.blade.php
    

    Laravel可以自动渲染它们 .

  • 1

    只要您想使用Laravel默认视图/错误目录来存储自定义错误视图,就应该在app / Exceptions / handler.php中调用isHttpException()方法 .

    /**
         * 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 ($this->isHttpException($e))
            {
                switch ($e->getStatusCode()) {
                    // not found
                    case 404:
                      //whatever you want to do with this exception
                      return $this->renderHttpException($e); 
                    break;
                    // internal error
                    case '500':
                      //whatever you want to do with this exception
                      return $this->renderHttpException($e); 
                    break;
    
                    default:
                        return $this->renderHttpException($e);
                    break;
                }
            }
            else
            {
                return parent::render($request, $e);
            }
        }
    

相关问题