![](/img/trans.png)
[英]after clicking submit on a contact form, how do i stay on the same page in wordpress?
[英]Laravel: How do I submit a form and stay in the same view?
我在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');
}
}
如您所見,我們返回的是redirect()->route('check.data')
,而不是return view('home')
redirect()->route('check.data')
。 這會將用戶重定向到具有已定義路由的其他控制器。 當然,這意味着您實際上是在一個用戶動作中執行兩個控制器方法,但這是常見的做法。
有關重定向的更多信息,請參見官方文檔 。
給您的建議我的朋友不要通過post方法返回視圖。
我想addNewData()方法是一種來自發布路由的方法。 因此,當您在發布方法后返回視圖時,不會提供頁面數據。 因此laravel拋出錯誤並抱怨缺少變量。 因此,您要做的就是重定向到查看該頁面的路由。 因此,您的方法將如下所示:
public function addNewData(Request $request)
{
$bez = $request->bez;
return redirect('YOUR ROUTE TO VIEW THE PAGE (URL)');
}
通常,這是通過重定向回您提交的同一頁面來完成的。 這是您的控制器中的外觀:
public function addNewData(Request $request)
{
$bez = $request->bez;
return back();
}
為了獲得更好的用戶體驗,還應該使用以下形式向視圖添加消息:
@if(session('status'))
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
@endif
並對您的控制器做一個小改動:
return back()->with('status', "Successfully submitted {$bez}!");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.