🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Q&A

解決済

2回答

2502閲覧

Laravelでsessionの値が保持されない原因

dato

総合スコア64

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

0グッド

1クリップ

投稿2019/10/09 14:09

問題点

sessionの情報が保持されないです。

namespace App\Http\Controllers; use Illuminate\Http\Request; public function userlog(ValiRequest5 $request){ ... $Ec_user=array(); $Ec_user[]=$Ec->id; $Ec_user[]=$Ec->name; $Ec_user[]=$Ec->address; $Ec_user[]=$Ec->email; $Ec_user[]=$Ec->password; $Ec_user[]=$Ec->credit_card; $request->session()->put('Ec_user'=>$Ec_user);    return view('product_list',['Ec_user'=>$Ec_user]); } }

このようにセッションに格納し、viewのproduct_listでは
@foreach($Ec_user as $user)
{{$user}}
@endforeach
とすることで、値が入っていることが確認できました。
しかし、その後

public function cart(Request $request){ $Ec_user=$request->session()->get('Ec_user'); return view('cart'['Ec_user'=>$Ec_user]); }

でview:cartで同様に
@foreach($Ec_user as $user)
{{$user}}
@endforeach
をするも以下のエラーがでてしまいます。

発生している問題・エラーメッセージ

Undefined variable: Ec_user (View: C:\Users\81909\Desktop\hellolaravel\resources\views\cart.blade.php)

試したこと

sessionファサードでもためしてみましたがうまくいかず。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Undefined variable: Ec_user

ならそのような変数が見つかりませんでした。
という意味なので、そもそもviewにその名前の変数が渡ってないのではないかと思います。
(仮にsessionに入っていなくてもnull的な感じになると思うのでこのエラーは違う気がします)

投稿2019/10/09 14:28

mikkame

総合スコア5036

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

質問では省略していましたが
return view('cart',['products'=>$products],['total'=>$total],['Ec_user'=>$Ec_user]);
のように
どうやら3つ以上viewに変数をおくっていたことが原因だったようです。

投稿2019/10/09 14:52

dato

総合スコア64

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mikkame

2019/10/09 15:19

3つ以上送るのがダメな訳ではありません。 その書き方だと 第1引数が 'cart' 第2引数が ['products'=>$products] 第3引数が ['total'=>$total] 第4引数が ['Ec_user'=>$Ec_user] となります。 viewに変数を渡すには第二引数に全ての変数を連想配列で渡す必要があります。 つまり、現在だとproductsしかviewに渡っていません。そして、私の回答へと繋がります。 正しくは return view('cart',[ 'products'=>$products, 'total'=>$total, 'Ec_user'=>$Ec_user ]); こうする、または return view('cart', compact('products', 'total', 'Ec_user')); です。 また、質問欄と自己解決欄で例示されているコードか乖離しています。 最初から、実際のコードを掲示しておけば、このような駄文はなくでも済んだのではないかと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問