You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中redirect携带message时如何让Toast在跳转后显示?

解决Laravel跳转后Toast提示不持久的问题

你遇到的问题是更新条目后,Toast提示仅在跳转前短暂显示,无法在目标页面正常展示。核心原因是Session键名不匹配,同时需要确保提示代码在跳转后的页面正确渲染。

问题代码展示

控制器代码

public function update(UpdateItem $request, $id)
{
    $vd = $request->validated();
    $item = $this->itemService->updateItem(json_decode($vd['data'], true), $id, $vd['modele_id']);

    if ($request->wantsJson()) {
        return ['item' => $item];
    } else {
        return redirect()->route('item-show', ['id' => $id])->with('message', "Objet modifié");
    }
}

Blade视图代码

@if($messages = session('messages') )
    <script>
        @if( is_array($messages) )
        @foreach ( $messages as $message )
        window.showSuccess('{{ $message }}')
        @endforeach
        @else
        window.showSuccess('{{ $messages }}')
        @endif
    </script>
@endif

解决方案

1. 统一Session键名

控制器中使用->with('message', ...)存入Session,但Blade里读取的是session('messages')(复数),两者键名不一致,导致跳转后无法读取到消息。

方案A:兼容多消息场景

修改控制器代码,将键名改为messages(复数),匹配Blade的读取逻辑:

return redirect()->route('item-show', ['id' => $id])->with('messages', "Objet modifié");

此时Blade代码无需修改,它已经兼容单个字符串或数组类型的消息。

方案B:简化单消息逻辑

如果只需要单条提示,可简化Blade代码并匹配控制器的键名:

@if($message = session('message') )
    <script>
        window.showSuccess('{{ $message }}')
    </script>
@endif

控制器代码保持不变即可。

2. 确保提示代码在目标页面渲染

务必将这段Blade提示代码放在**跳转后的目标页面(item-show对应的视图)**中,而不是仅在提交表单的页面。因为跳转后会加载新页面,只有目标页面的脚本才会执行。

3. 验证JS函数存在性

确认window.showSuccess函数在目标页面已正确加载(比如引入了对应的Toast库或自定义JS),否则即使脚本渲染成功也不会弹出提示。

内容的提问来源于stack exchange,提问作者LoicJu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 19:50:24