尝试在类和控制器中捕获语句

时间:2017-09-15 23:29:08

标签: php laravel try-catch

我有一个关于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())]);
    }
}

2 个答案:

答案 0 :(得分:0)

由于您没有抛出错误,控制器将无法捕获它。为了保持原始错误数据,你可以做这样的事情......

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-&gt; getMessage()

答案 1 :(得分:0)

[...]

} 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结束。