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