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
相关产品推荐
相关产品推荐

