2017-02-23 170 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 I всегда появляется «Пустое исключение». Однако /test/numeric показывает исключение нормально. Кроме того, я проверял содержимое сеанса в обоих случаях, в первом случае объект исключения вообще не передается.

Я пропустил что-то очевидное здесь?

ответ

0

После многократного прорывания я понял, что это невозможно сделать из-за трассировки стека исключений. Существует множество функций, которые принимают за закрытие в качестве параметров, и из-за этого трассировка стека исключений не является сериализуемой. Кажется, что Laravel спокойно отбрасывает из сеанса любые несериализуемые переменные.