php - Laravel:我如何提交表单并保持在同一个视图中?
问题描述
我在 Laravel 中有一个视图,其中已经包含了 foreach 循环。页面底部是一个小表格。现在我想发送此表单以将数据保存到数据库中。
同时,我想保持相同的观点。如果我在表单中输入相同的页面,我会收到一条错误消息。如果我想通过控制器返回视图,我也会收到错误消息。
在此错误中,先前由另一个控制器传递的循环中数据的输出不再起作用。- 我能做些什么?
未定义变量:数据(查看:/srv/users/smartfinance/apps/smartfinance/public/laravel/resources/views/home.blade.php)
<?php $__currentLoopData = $data; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $d): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
我希望你能理解我的问题,并能给我一个提示如何解决它。
这是两个控制器:
class checkDataController extends Controller
{
public function data()
{
$data = DB::table('test')->where('booking_date', '=', $today)->get();
return view('home', compact("data"));
}
}
class AddContractController extends Controller
{
public function addNewData(Request $request)
{
$bez = $request->bez;
return view('home');
}
}
解决方案
您的错误是您尝试从两种不同的控制器方法显示相同的视图。通常,视图仅由一种控制器方法使用。其他方法可以重定向到此方法以(重新)显示相同的视图。这样,为视图检索数据的逻辑只需要在一个地方进行。
class CheckDataController extends Controller
{
// route 'check.data'
public function data()
{
$data = DB::table('test')->where('booking_date', '=', $today)->get();
return view('home', compact("data"));
}
}
class AddContractController extends Controller
{
// route 'contract.create'
public function addNewData(Request $request)
{
Contract::create($request->input()); // unsafe, only for demonstration...
return redirect()->route('check.data');
}
}
如您所见,return view('home')
我们正在返回而不是redirect()->route('check.data')
。这会将用户重定向到具有定义路由的另一个控制器。当然,这意味着您实际上是在一个用户操作中执行两个控制器方法,但这是常见的做法。
有关重定向的更多信息可以在官方文档中找到。
推荐阅读
- python - 如何将变量存储在文件中,以便它们将它们的值保存在我可以在程序中打印出来的位置?
- r - 在 R 中创建表格,其中使用 formattable 包将单元格格式化为多种颜色
- c# - 如何在 C# 中制作特殊的正则表达式?
- python - 当有空值时,Pandas json_normalize 将整数转换为浮点数
- html - 如何从详细信息元素中删除项目符号?
- php - mysql 在两个表中插入
- ansible - 循环内循环
- c# - 如何从 pdf 文件中的表格中获取文本?
- flutter - 是否可以缓存小部件以恢复?
- node.js - 构建服务器时出错 [Route.get() 需要回调函数]