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

Statamic中redirect()->with()传递数据至模板失效问题求助

解决Statamic表单提交后无法显示成功提示的问题

嘿,我之前在Statamic里处理表单的时候也碰到过一模一样的问题!给你几个实用的解决思路,按顺序试试应该能搞定:

1. 用正确的方式在模板里读取闪存数据

你用->with()把数据存在了Laravel的会话闪存里,但Statamic的Antlers模板需要用特定语法访问会话变量,直接用普通变量是读不到的。

如果你的模板是Antlers格式,这么写:

{{ if session:form_success }}
    <div class="success-alert">提交成功!</div>
{{ /if }}

要是用的Blade模板(比如你自定义了控制器用Blade),就用Laravel原生的会话助手:

@if(session('form_success'))
    <div class="success-alert">提交成功!</div>
@endif

2. 确认你的跳转代码真的执行了

有时候可能是表单提交的逻辑没走到这条redirect语句——比如前面有个条件判断提前return了,或者表单验证失败走了其他分支。

可以临时加个日志验证一下:

// 在redirect之前加入日志
\Illuminate\Support\Facades\Log::info('表单提交成功,准备设置提示消息');

return redirect()
    ->back()
    ->with(['form_success' => true]);

然后去storage/logs/laravel.log里看看有没有这条日志,确认代码确实被执行了。

3. 试试Statamic原生的表单成功提示(更省心)

其实Statamic自带了表单处理的成功提示功能,不用自己写控制器跳转,用起来更顺手:

  • 打开你的表单配置文件(比如resources/forms/你的表单名.yaml),加上成功消息配置:
success_message: "提交成功!我们会尽快与你取得联系。"
  • 然后在模板的表单标签里直接调用成功状态:
{{ form:你的表单名 }}
    {{# 显示成功提示 #}}
    {{ if success }}
        <div class="success-alert">{{ success_message }}</div>
    {{ /if }}

    {{# 表单字段和提交按钮 #}}
    <input type="text" name="name" required>
    <button type="submit">提交</button>
{{ /form:你的表单名 }}

这种方式完全贴合Statamic的生态,不用操心会话和跳转的问题,推荐优先试试这个!

4. 排查会话配置是否正常

如果上面的方法都不管用,可能是会话驱动出了问题:

  • 检查storage/framework/sessions目录有没有写入权限(服务器上要确保web用户能读写这个目录)
  • 看看.env文件里的SESSION_DRIVER是不是设置成了file或者database(别用array,array驱动是内存级的,重启就没了)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:01:45