Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

rruben's avatar

Session Flash message get lost

The session flash messages get lost if the controller have try catchs . why?

Example, this works fine:

public function store(ModelRequest $request) {
        $v = $request->validated();
        $model = new Model();
        $model->xxx = $v['xxx'];
        $model->yyy = $v['yyy'];
        $model->zzz = $v['zzz'];
        $model->user()->associate(Auth::user());
		$model->save();
        
	    $flash_msg = []; // flash messages
		$message = "Model #{$model->id} loaded!";
		$msg = [
			'class' => 'success',
            'title' => "Model subsystem",
			'message' => $message
		];
        $flash_msg [] = $msg;

        Session::flash('flash_msg', $flash_msg);
		return redirect("/model");
    }

This don't:

public function store(ModelRequest $request) {
        $v = $request->validated();

	    $flash_msg = []; // flash messages

		DB::statement("SET autocommit=0;");
		DB::beginTransaction();
		try{
			// other db stuff
			// ...
			// 
        	$model = new Model();
		    $model->xxx = $v['xxx'];
        	$model->yyy = $v['yyy'];
        	$model->zzz = $v['zzz'];
        	$model->user()->associate(Auth::user());
			$model->save();
			DB::commit();
		} catch(\Throwable $e) {
			DB::rollBack();
			$message = "ERROR ({$e->getCode()}): '{$e->getMessage()}'";
            $msg = [
                'class'     => 'danger',
                'title'     => "Model subsystem",
                'message'   => $message
            ];
			$flash_msg [] = $msg;
			Session::flash('flash_msg', $flash_msg);
			return redirect("/model");
		}
       
		$message = "Model #{$model->id} loaded!";
		$msg = [
			'class' => 'success',
            'title' => "Model subsystem",
			'message' => $message
		];
        $flash_msg [] = $msg;
        Session::flash('flash_msg', $flash_msg);
		return redirect("/model");

why?

0 likes
4 replies
rruben's avatar

@Tray2 yep, try everything I found with no luck. Somehow the flash session variable is flushed if I use try catch in the controller.

Please or to participate in this conversation.