首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >所有404的例外

所有404的例外
EN

Stack Overflow用户
提问于 2018-06-19 03:33:24
回答 3查看 4K关注 0票数 0

问题很简单。使用laravel 5.6

例如,这条路

代码语言:javascript
运行
复制
Route::get('/services/{id}/{service}', ['as'=> 'services.show', 'uses' => 'ServicesController@show']);

在控制器里面我做了一些花哨的逻辑。

问题是:在控制器内部出现故障时,是否还有其他优雅的方法来抛出404,而不是从laravel中抛出典型的ErrorException页面?(这不是404)。

一个简单的例子可能是id没有插入到数据库中,所以这使得应用程序失败,而不是返回404。

我想一个解决方案应该是插入一个try catch条件,如果它失败了,则呈现(404)。或多或少..。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-19 04:11:49

如果有呈现方法,请转到app/Exception,或者添加该方法。

例如:

代码语言:javascript
运行
复制
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);
}
票数 3
EN

Stack Overflow用户

发布于 2018-06-19 04:13:44

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

代码语言:javascript
运行
复制
/**
 * @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);
}
票数 2
EN

Stack Overflow用户

发布于 2018-06-19 03:59:14

你可以试试这个

代码语言:javascript
运行
复制
try{
 ... your fancy code here
}catch(Exception $e){
 abort(404, 'Custom 404 error message');
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50920254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档