重定向后刀片中的未定义变量
Posted
技术标签:
【中文标题】重定向后刀片中的未定义变量【英文标题】:Undefined variable in blade after redirect 【发布时间】:2020-12-04 07:07:59 【问题描述】:我正在使用 Laravel 7 和 php 7.4。
我的项目中有表格。用户可以提交表单,我可以生成用户提供的值的报告。最初的问题是表单在页面刷新时重新提交,这是不可取的。我试图用 redirect-> 阻止它,但问题是我无法将变量从控制器获取到我的视图中。
这是我的刀片上的错误。
Undefined variable: seller
控制器
$seller = Sellers::take(1)->latest()->get();
return redirect()->route('private_seller_report')->with(['seller' => $seller]);
刀片
@php
$seller = Session::get('seller');
@endphp
@foreach($seller as $row)
<a href="#">$row->seller_name</a>
@endforeach
所以我的最终目标是防止表单在刷新时提交。
【问题讨论】:
确保这一点。名称路由private_seller_report
使用正确的页面,您尝试在其中捕获$seller
变量
@sta 这是我想要获取变量的 110% 正确且预期的页面。
如果您使用 return redirect()->route('private_seller_report')->with(['seller' => $seller]);
。您需要在刀片中使用Session::get('seller');
。这样就可以获取数据了。
***.com/questions/25078452/…,请看这个链接
我认为它在您的会话中,例如 @foreach(session()->get('seller') as $row)
【参考方案1】:
下面是一个示例,说明如何做到这一点。 ->with()
方法不适用于此用途,但您可以改为在 route 方法中传递数据,如下所示:
Route::get('/first-route', static function()
return redirect()->route('second-route', ['data' => [1, 2, 3]]);
);
Route::get('/second-route', static function(\Illuminate\Http\Request $request)
return view('test-view', ['data' => $request->input('data')]);
)->name('second-route');
请记住,您正在重定向到另一个路由,因此您需要重定向到的路由才能将数据传递到视图中。在这个例子中,您可以看到我将[1, 2, 3]
传递给second-route
,然后通过请求对象获取数据。然后我将它传递到second-route
的视图中。
如果我在second-route
中执行dd($request->input('data');
,我会得到:
array:3 [
0 => "1"
1 => "2"
2 => "3"
]
所以我最好的猜测是,在第一个路由重定向到下一个路由之后,您永远不会将数据传递到视图中。
更新:
花点时间阅读有关->with()
方法https://laravel.com/docs/7.x/redirects#redirecting-with-flashed-session-data 的文档并查看RedirectResponse.php
中代码的PHPDoc:Flash a piece of data to the session.
您可以在这里看到“flash”的用途:https://www.itsolutionstuff.com/post/laravel-5-implement-flash-messages-with-exampleexample.html
【讨论】:
我很欣赏您的方法,但唯一的问题是我要发送的数据是数据库中的表。我不认为我可以将表值作为路由中的数据传递。 你可以在路由和视图之间传递你想要的任何数据。数据库中的水合模型并不重要。它工作得很好。为了简单起见,我用[1, 2, 3]
做了这个例子,但你可以做['data' => Sellers::take(1)->latest()->get()]
,这样就可以了。路由重定向不会将您带到视图,而是控制器中的另一种方法,因此刀片文件中的Undefined variable: seller
错误告诉我它没有传递到视图中。我希望你能弄清楚。【参考方案2】:
第一次你需要使用这个路由调用sellerPage方法。
Route::get('/seller/page','SellerController@sellerPage')->name('private_seller_report');
public function sellerPage()
$seller = Sellers::take(1)->latest()->get()->toArray();
return view('your.blade')->with(['seller' => $seller]);
【讨论】:
你没有听懂我的问题。我知道这种语法。但如果我喜欢这样,我的表单将在刷新时再次提交,这就是我不想看到的。 第一次加载能看出来吗? 是的,我可以看到。 @Shaan。尝试第二种解决方案 你为什么要使用 Session。你不需要它以上是关于重定向后刀片中的未定义变量的主要内容,如果未能解决你的问题,请参考以下文章