doraemon0769 2017-02-23 10:28
浏览 39
已采纳

使用异常变量重定向

I have the following (test) setup:

web.php

Route::get("test/test","TestController@test");
Route::get("test/numeric","TestController@numeric");
Route::get("forbidden", "TestController@exception")

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";
    }
}
}

When I navigate to /test/test I always get "Empty exception" to appear. However /test/numeric shows the exception normally. Furthermore I've checked the contents of the session in both cases, in the first case the exception object is not passed at all.

Am I missing something obvious here?

  • 写回答

1条回答 默认 最新

  • duanli6618 2017-02-23 11:34
    关注

    After a lot more digging through I've realised that this is impossible to do because of the exception stack trace. There's a lot of functions which take in closures as parameters and because of that the exception stack trace is not serializable. Laravel seems to quietly drop any non-serializable variables from the session.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。
  • ¥20 CST怎么把天线放在座椅环境中并仿真
  • ¥15 任务A:大数据平台搭建(容器环境)怎么做呢?
  • ¥15 YOLOv8obb获取边框坐标时报错AttributeError: 'NoneType' object has no attribute 'xywhr'