Laravel 5.5:工时页表单数据传草稿页问题及相关疑惑求助
嘿,我能理解你这种解决过又搞乱的懊恼——别慌,结合你用Laravel 5.5和VirtualBox Ubuntu 16.04的环境,还有和$test变量相关的线索,咱们一步步把问题捋清楚,找回之前的正确逻辑:
核心解决方案:工时表单数据转草稿页面
这类需求通常用Session临时暂存或者数据库持久化草稿实现,结合你提到的$test变量,大概率是用来标记「草稿提交」的开关,先给你梳理两种最常见的实现方式:
1. 快速临时方案:用Session暂存草稿数据
如果草稿不需要长期保存,直接把表单数据存在Session里最方便,刚好能对应你之前可能的实现:
工时页面的提交逻辑(控制器)
// 比如 TimesheetController@saveAsDraft public function saveAsDraft(Request $request) { // 用$test变量判断是否触发草稿保存逻辑 if ($request->has('test') && $request->test == true) { // 把表单数据存入Session,排除掉_token和test标记 session(['timesheet_draft' => $request->except('_token', 'test')]); // 跳转到草稿页面 return redirect()->route('draft.show'); } }
草稿页面的读取逻辑(控制器)
// 比如 DraftController@show public function show() { // 从Session取出草稿数据,没有的话返回空数组避免报错 $draftData = session('timesheet_draft', []); // 把数据传到视图,用来填充表单 return view('draft.index', compact('draftData')); }
别忘了在表单里加$test标记
确保工时页面的表单里有这个隐藏域,用来触发草稿逻辑:
<input type="hidden" name="test" value="{{ $test }}">
2. 稳定持久方案:数据库存储草稿
如果需要长期保留草稿,建议建一个timesheet_drafts表(结构和工时表对应),用关联用户的方式存储:
提交草稿到数据库
public function saveAsDraft(Request $request) { if ($request->test) { // 给当前登录用户创建/更新草稿 TimesheetDraft::updateOrCreate( ['user_id' => auth()->id()], $request->except('_token', 'test') ); return redirect()->route('draft.show'); } }
从数据库读取草稿
public function show() { $draftData = TimesheetDraft::where('user_id', auth()->id())->first() ?? []; return view('draft.index', compact('draftData')); }
针对
$test变量的排查点 既然问题和它相关,一定要确认这几个细节:
- 检查
$test变量是否在工时页面的视图里正确传递,有没有在控制器/路由里遗漏赋值 - 注意Laravel请求参数默认是字符串类型,比如如果你的
$test是布尔值,要判断$request->test == 'true'还是$request->test == true,别搞混了 - 确认表单里的
$test隐藏域值是否正确渲染,比如查看页面源代码,看input的value是不是你预期的
解决VirtualBox环境的代码延迟问题
这个坑确实容易让人反复试错,给你几个有效的解决方法:
- 清除Laravel缓存:开发环境下缓存会导致代码不更新,执行这几条命令:
php artisan cache:clear php artisan config:clear php artisan route:clear - 优化共享文件夹同步:VirtualBox的默认共享文件夹延迟很高,换成
rsync同步或者用Laravel Homestead的同步机制(如果用的是Homestead) - 强制刷新浏览器:有时候是浏览器缓存的锅,按
Ctrl+F5强制刷新页面,别用普通刷新 - 用artisan serve的重载模式:启动服务时加
--reload参数,确保代码修改后立即生效:php artisan serve --reload
找回之前正确代码的小技巧
如果你用了Git版本控制,直接查历史提交就能找回之前的修复:
# 查看历史提交记录,找解决问题那次的commit ID git log --oneline # 查看那次提交的具体代码 git show abc1234
如果没做版本控制,就先从最简单的Session方案开始测试,一步步验证数据能不能正确传递,慢慢还原之前的逻辑。
内容的提问来源于stack exchange,提问作者Bryan
相关产品推荐
相关产品推荐

