2017-09-15 72 views
0

我有一個關於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

'NotReadableException'引用擴展類'Exception',您必須創建它才能這樣做:try {} catch(){}塊沒有任何問題。然而,我不確定'response()'來自哪裏。你確定它不是'$ e-> response()'?因爲'$ e'是實例異常 – KDOT

+0

如果我做$ e-> response([],$ e-> getCode(),['Content-Length'=> $ e-> getMessage()])在json中返回,因爲這就是我想要的 – ONYX

+0

Acutally你能告訴我你創建一個NotReadableException類是什麼意思,你可以給我一個答案,請告訴我如何將它連接在一起@KDOT – ONYX

回答

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->的getMessage( )

+0

所以,如果我在嘗試中拋出一個錯誤塊將我的控制器捕獲錯誤,並返回它爲json – ONYX

+0

我不確定你的控制器是如何設置的,但通常你仍然需要在json中編碼你的響應,但你是否試圖將它傳遞給視圖或ajax請求等?我假設你的商店功能在控制器中,這是真的嗎? –

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,但是,您沒有顯示任何代碼,因此我只能猜測它的層次結構。


在非擴展Exception類下面的例子如下所示:

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

https://3v4l.org/O7WJFSee it working here過來。