重定向后刀片中的未定义变量

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()-&gt;route('private_seller_report')-&gt;with(['seller' =&gt; $seller]); 。您需要在刀片中使用Session::get('seller');。这样就可以获取数据了。 ***.com/questions/25078452/…,请看这个链接 我认为它在您的会话中,例如 @foreach(session()-&gt;get('seller') as $row) 【参考方案1】:

下面是一个示例,说明如何做到这一点。 -&gt;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-&gt;input('data');,我会得到:

array:3 [
  0 => "1"
  1 => "2"
  2 => "3"
]

所以我最好的猜测是,在第一个路由重定向到下一个路由之后,您永远不会将数据传递到视图中。

更新: 花点时间阅读有关-&gt;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' =&gt; Sellers::take(1)-&gt;latest()-&gt;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。你不需要它

以上是关于重定向后刀片中的未定义变量的主要内容,如果未能解决你的问题,请参考以下文章

登录重定向后 Office 2016 加载项中的“Word 对象未定义”

标头重定向后未定义PHP会话索引?

Rails在破坏行动后重定向

laravel刀片视图中的变量未定义错误

find_users 的未定义局部变量

视图页面laravel中的未定义变量[关闭]