2017-02-23 143 views
0

我有以下的(試驗)設置:重定向與異常變量

web.php

Route::get("test/test","[email protected]"); 
Route::get("test/numeric","[email protected]"); 
Route::get("forbidden", "[email protected]") 

TestController.php

use \Symfony\Component\HttpKernel\Exception\HTTPException; 
public class TestController { 

public function test() { 
    return redirect()->to("/forbidden")->with("exception",new HttpException(403));    
} 

public function numeric() { 
    return redirect()->to("/forbidden")->with("exception",403);    
} 

public function exception() { 
    if (\Session::get("exception") instanceof \Throwable) { 
     throw \Session::get("exception"); //Let the default handler handle it. 
    } else if (is_numeric(\Session::get("exception"))) { 
     throw new HttpException(\Session::get("exception")); 
    } else { 
     return "Empty exception"; 
    } 
} 
} 

當我導航到/test/test我總是會出現「空例外」。 但是/test/numeric通常會顯示異常。此外,我已經在兩種情況下檢查了會話的內容,在第一種情況下,異常對象根本不通過。

我在這裏錯過了一些明顯的東西嗎?

回答

0

經過很多深入的研究,我意識到這是不可能的,因爲異常堆棧跟蹤。有很多函數以閉包爲參數,並且因爲異常堆棧跟蹤是不可序列化的。 Laravel似乎悄悄地從會話中刪除任何不可序列化的變量。