我在Laravel中有一个已经合并了foreach循环的视图。页面底部是一个小表格。现在,我想发送此表单以将数据保存到数据库中。
同时我想保持相同的观点。如果我在表单中输入同一页面,则会收到错误消息。如果我想通过控制器返回视图,我也会收到错误消息。
在此错误中,先前由另一个控制器传递的循环中数据的输出不再起作用。 -我该怎么办?
未定义变量:数据(查看:/srv/users/smartfinance/apps/smartfinance/public/laravel/resources/views/home.blade.php)
struct node_s **t
希望您能理解我的问题,并给我提示如何解决。
这是两个控制器:
free_table()
答案 0 :(得分:0)
您的错误是您尝试通过两种不同的控制器方法显示同一视图。通常,一个控制器只使用一个视图。其他方法可以重定向到此方法,以便(重新)显示相同的视图。这样,仅在一个地方就需要逻辑为视图检索数据。
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')
。这会将用户重定向到具有已定义路由的其他控制器。当然,这意味着您实际上是在一个用户操作中执行两个控制器方法,但这是常见的做法。
有关重定向的更多信息,请参见official documentation。
答案 1 :(得分:0)
给您的建议我的朋友不要通过post方法返回视图。
我认为addNewData()方法是一种来自发布路线的方法。因此,当您在发布方法后返回视图时,不会提供页面数据。因此laravel抛出错误并抱怨缺少变量。因此,您要做的就是重定向到查看该页面的路由。因此,您的方法将如下所示:
public function addNewData(Request $request)
{
$bez = $request->bez;
return redirect('YOUR ROUTE TO VIEW THE PAGE (URL)');
}