【问题标题】:Laravel NotFoundHttpException HandlingLaravel NotFoundHttpException 处理
【发布时间】:2019-12-04 09:59:49
【问题描述】:

我无法在 Laravel 中处理 NotFoundHttpException

我已经尝试通过Handler.php中的render()来处理


// Handler.php 
// render()
==============

public function render($request, Exception $e)
    {
        if($e instanceof NotFoundHttpException){
            return response('Not Found');
        }
        return parent::render($request,$e);
   }

它应该返回响应“未找到”。但它正在返回

类'Symfony\Component\HttpKernel\Exception\NotFoundHttpException' 没找到

这意味着在 vendor 文件夹中找不到 NotFoundHttpException 类,我试图在指定的路径中查找该类但找不到。

【问题讨论】:

  • 添加使用异常时;你遇到了什么错误?

标签: php laravel-5


【解决方案1】:
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

【讨论】:

  • 您能进一步解释一下吗?如果该类尚未导入,错误消息应如何打印 FQDN?
【解决方案2】:

你可以这样试试:

<?php

namespace App\Exceptions;

use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;

class Handler extends ExceptionHandler
{

    /**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Exception  $exception
     * @return \Illuminate\Http\Response
     */
    public function render($request, Exception $exception)
    {
        if ($this->isHttpException($exception)) {
            $statusCode = $exception->getStatusCode();
            switch ($statusCode) {
                case '404':
                    return response()->view('errors/404');
                case '500';
                    return response()->view('errors/500');
            }
        }
        return parent::render($request, $exception);
    }

}

将此代码合并到您的 handler.php 中,而不是直接粘贴。

【讨论】:

    【解决方案3】:

    写入控制器顶部

    use Exception; 
    

    【讨论】:

    • 您能进一步解释一下吗?如果Exception没有正确导入,应该还有另外一条错误信息
    【解决方案4】:

    在 handler.php 中

    public function render($request, Exception $exception)
        {
            if ($this->isHttpException($exception)) {
                switch ($exception->getStatusCode()) {
                    case 404:
                        return redirect()->route('error404');
                        break;
                    case '500':
                        return redirect()->route('error500');
                        break;
                    default:
                        return redirect()->route('errordefault');
                        break;
                }
            }
            else{
                return parent::render($request,$exception);
            }
            return parent::render($request, $exception);
        }
    

    然后在web.php中你可以路由到你想要的Controller,这里我用自制的ErrorController.php处理

    //Error page
    Route::get('errors', 'ErrorController@errordefault')->name('errordefault');
    Route::get('404', 'ErrorController@error404')->name('error404');
    Route::get('500', 'ErrorController@error500')->name('error500');
    

    在ErrorController中制作函数errordefault()、error404()和error500();

    在 ErrorController.php 中

    <?php
    
    namespace App\Http\Controllers;
    use Illuminate\Http\Request;
    
    class ErrorController extends Controller
    {
    
        public function error404()
        {
            return view('error_page');
        }
        public function error500()
        {
            return view('error500_page');
        }
        public function errordefault()
        {
            return view('default_error_page');
        }
    }
    
    

    【讨论】:

    • 不是重定向的问题,if条件总是返回false,因为if语句的主体没有在Handler.php中执行。
    【解决方案5】:

    你可以在 laravel 中试试这个

         try{
            $response= model::where('uid',$uid)->update($insertArry);
            if($response){
                $backMessage = "insert success";
                $status='success';
                return redirect()->route('website')->with($status, $backMessage);
    
            }else{
                $backMessage = "something wrong!";
                $status='danger';
                return redirect()->route('website')->with($status, $backMessage);
            }
        }catch (Exception $e) {
            //get exception here
            $backMessage = $e;
            $status='info';
            return redirect()->route('website')->with($status, $backMessage);
        }
    

    【讨论】:

      【解决方案6】:

      试试 dd($excpetion); 有时是另一个例外,例如 Illuminate\Database\Eloquent\ModelNotFoundException。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-06
        • 2016-12-02
        • 1970-01-01
        • 1970-01-01
        • 2018-04-14
        • 1970-01-01
        • 2017-01-23
        相关资源
        最近更新 更多