【问题标题】:try catch statments with in a class and controller在类和控制器中尝试 catch 语句
【发布时间】:2017-09-15 23:29:07
【问题描述】:

我有一个关于 try catch bock 异常的问题。我想知道我是否有一个名为 Image 的类来制作图像,并且在该类中是一个 try catch 语句,如果有错误,我希望我的控制器使图像返回响应,所以在我的控制器中我也有一个catch 语句我想知道的是我在下面正确并且在我有错​​误时可以工作,如果它不起作用,你能告诉我我的语句应该是什么。

<?php 
namespace App\Acme\Imaging;

use Image as Intervention;

class Image
{

    public function __construct($input) {

    }

    public function save() {
        try {

            $image = Intervention::make(...);
            $image->save(...);

        } catch(NotReadableException $e) {
            return response()->json(['error' => true, 'message' => $e->getMessage()], $e->getCode(), ['Content-Length' =>$e->getMessage()])
        }
    }
}

public function store(PostRequest $request)
{
    try {
        $image = new Image;
        $image->width = 500;
        $image->height = 500;
        $image->save();

        $post = new Post;
        $post->fill($request->all());
        $post->created_by = Auth::user()->id;
        $post->image = $image;

        if($post->save()) {
            return response()->json($post, 200, ['Content-Lnegth' => strlen(json_encode($post))]);
        }

    } catch(Exception $e) {
        return response()->json(array('error' => true, 'type' => 'exception', 'message' => $e->getMessage()), $e->getCode(), ['Content-Length' => strlen($e->getMessage())]);
    }
}

【问题讨论】:

  • NotReadableException 引用到扩展类 Exception ,您必须为此创建该类:try{} catch() {} 块没有任何问题。我不确定response() 来自哪里。你确定不是$e-&gt;response() 吗?由于$e 是实例化异常
  • 如果我这样做 $e->response([], $e->getCode(), ['Content-Length' => $e->getMessage()]) 会返回在 json 中,因为这就是我想要的
  • Acutally 你能告诉我你通过创建一个 NotReadableException 类是什么意思吗?你能给我一个答案吗?请告诉我如何将它们链接在一起@KDOT

标签: php laravel try-catch


【解决方案1】:

由于您没有抛出错误,因此控制器不会捕获它。为了维护原始错误数据,您可以执行以下操作...

public function save() {
    try {

        $image = Intervention::make(...);
        $image->save(...);

    } catch(NotReadableException $e) {
        throw new Exception('Error Saving file: ' . 'message: ' . e->getMessage() . ' code: ' . $e->getCode();
    }
}

然后你的调用函数将进入 catch 块并吐出整个东西作为它的一部分 $e->getMessage()

【讨论】:

  • 因此,如果我在 try 块中抛出错误,我的控制器将捕获错误并将其作为 json 返回
  • 我不确定你的控制器是如何设置的,但通常你仍然需要在 json 中编码你的响应,但你是想将它传递给视图或 ajax 请求等吗?我假设您的商店功能在控制器中,这是真的吗?
【解决方案2】:
[...]

} catch( NotReadableException $e ) {
    return json_encode( array(
        'code'           => $e
            ->response()
            ->getCode(),
        'content-length' => $e
            ->response()
            ->getMessage()
    ) );
}

[...]

要在 json 中编码某些内容,您必须使用 json_encode() 函数。假设实例化的NotReadableException 正在使用response() 方法返回一个保存数据的对象,它可能看起来像上面的样子。

response() 表示当前对象范围,您需要通过您创建的变量($e)来定位实例化异常,但是,您没有显示任何代码,所以我只能猜测您的层次结构。


以下关于非扩展 Exception 类的示例如下所示:

try {
    throw new Exception( "Example message." );
} catch ( Exception $e ) {
    return json_encode( array (
        'content-length' => $e
            ->getMessage()
    ) );
}

See it working herehttps://3v4l.org/O7WJF

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-06
    • 2012-05-22
    • 1970-01-01
    • 2015-09-13
    • 2014-12-22
    • 2010-10-29
    • 1970-01-01
    相关资源
    最近更新 更多