【问题标题】:Using php exception is still returning exception error page使用php异常还是返回异常错误页面
【发布时间】:2017-12-09 19:24:33
【问题描述】:

我有以下控制器:

<?php

namespace App\Http\Controllers;


use App\WebPackage;

use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;


class WebProcessController extends Controller
{


    public function sendPayment(Request $request)
    {

       if ($request->ptitle && $request->pricetotal ){

           try {
               $product = WebPackage::findOrFail($request->ptitle);
           }
           catch (NotFoundHttpException $exception){
               die();
           }
           return $product;

       }

只是为了尝试,我发送了一个 $request->ptitle,其值 id 不在 WebPackage 模型中。

据我所知,当出现错误异常时,die() 函数应该可以工作。 但仍然显示错误页面:

Sorry, the page you are looking for could not be found.

2/2
NotFoundHttpException in Handler.php line 113:
No query results for model [App\WebPackage] 20

在使用 'try' 和 'catch' 时我做错了什么吗?

【问题讨论】:

  • findOrFail 适用于 id。你应该使用 where 条件
  • @CavidKərimov 使用我知道,插入的值是整数
  • 未发现异常。 Webpackage 中没有任何行,这就是为什么它会抛出 NotFoundException
  • @CavidKərimov 我知道,也许你不明白我的问题,我不是在谈论为什么我在 DB 中找不到任何行,我知道如果我将 id 20 传递给 findOrFail 方法将返回错误。专注于我的代码捕获 (NotFoundHttpException $exception){ die();这意味着用户根本不应该显示错误,只是让脚本死掉。

标签: php laravel exception laravel-5 exception-handling


【解决方案1】:

问题是您正在捕获无效的异常类型。 findOrFail throws \Illuminate\Database\Eloquent\ModelNotFoundException 如果没有找到记录并且你在这里捕获NotFoundHttpException 这是完全不同的异常。

此外,如果您只想对用户隐藏错误,您应该考虑在Handler 中处理异常或在.env 文件中将APP_DEBUG 设置为false

【讨论】:

    猜你喜欢
    • 2011-02-28
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 2011-02-04
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    相关资源
    最近更新 更多