代码之家  ›  专栏  ›  技术社区  ›  Julian Mendez

删除404的所有例外

  •  0
  • Julian Mendez  · 技术社区  · 6 年前

    Route::get('/services/{id}/{service}', ['as'=> 'services.show', 'uses' => 'ServicesController@show']);
    

    在控制器里面,我做一些奇特的逻辑。

    我想一个解决方案应该是插入一个try-catch条件,如果它不能成功呈现(404)。或多或少……

    3 回复  |  直到 6 年前
        1
  •  2
  •   User123456    6 年前

    如果有渲染方法,请更改它,或添加该方法。

    public function render($request, Exception $exception)
    {
        if($exception instanceof NotFoundHttpException){
            return response()->view('errors/404', ['invalid_url'=>true], 404);
        }
    
        if ($exception instanceof TokenMismatchException && Auth::guest()) {
            error_log('Error :' . $exception->getMessage());
            abort(500);
        }
    
        if ($exception instanceof TokenMismatchException && getenv('APP_ENV') != 'local') {
            return redirect()->back()->withInput();
        }
    
        if($exception instanceof \Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException && getenv('APP_ENV') != 'local') {
            error_log('Error :' . $exception->getMessage());
            abort(404);
        }
    
        if(($exception instanceof PDOException || $exception instanceof QueryException) && getenv('APP_ENV') != 'local') {
            error_log('Error :' . $exception->getMessage());
            abort(500);
        }
    
        if ($exception instanceof ClientException) {
            error_log('Error :' . $exception->getMessage());
            abort(500);
        }
    
        return parent::render($request, $exception);
    }
    
        2
  •  1
  •   Alexander Orlovskiy    6 年前

    有优雅的方式做你想做的事。Laravel在app/exceptions目录中有一个名为handler.php的文件。此文件包含名为handler的类,并且有render方法。就这样!您应该使用此方法将所有异常转换为404异常,如下所示:

    /**
     * @param $request
     * @param Exception $exception
    
     * @return mixed
     */
    public function render($request, Exception $exception)
    {
        // you could do abort(404) if you prefer helpers
        $notFoundException = new NotFoundHttpException($exception->getMessage());
    
        return parent::render($request, $notFoundException);
    }
    
        3
  •  0
  •   rkj    6 年前

    try{
     ... your fancy code here
    }catch(Exception $e){
     abort(404, 'Custom 404 error message');
    }
    
    推荐文章