前提・実現したいこと
- ECサイトのようなアプリ作成中
- /mycartにアクセスすればカートに追加した商品の数が表示されるよう設計済み
- /mycart以外の全てのページでカートに入った商品の数が表示されるようにしたい(ヘッダーに表示したい)
発生している問題・エラーメッセージ
現状では、/mycartにアクセスしたときしか
ヘッダーに商品の個数を表示できません。
カート内の商品個数の情報を
ヘッダーの情報などを司る共通テンプレートであるapp.blade.phpに渡せばいいのでは?
と考えたのですが、それもうまくいかない状況です。
(情報が渡せず、数が表示されません)
該当のソースコード
↓ルーティング(web.php)
php
1 Route::get('/mycart', 'ShopController@myCart');//cart内の商品を表示する
↓コントローラー(ShopController.php)
php
1 public function myCart(Cart $cart) 2 { 3 $data = $cart->showCart();//showCartメソッドの実行結果を格納 4 return view('mycart', $data); 5 }
↓モデル(Cart.php)
php
1 public function showCart() 2 { 3 $user_id = Auth::id(); //ログインしているユーザーのIDを取得 4 $data['items'] = $this->where('user_id', $user_id)->get();//ログインユーザーのIDと同じ値を持つuser_idカラムのレコードを連想配列$dataのキー「my_carts」に格納 5 6 $data['count']=0; //カート内の商品の個数は0からカウントアップ 7 $data['sum']=0; //合計金額も0からカウントアップ 8 9 foreach ($data['items'] as $item) { 10 $data['count']++;//繰り返しごとにカウントは1ずつアップ 11 $data['sum'] += $item->stock->fee; 12 } 13 return $data; //連想配列データを実行結果として返す
↓ビュー(app.blade.php)
php
1//中略 2<li> 3 <a class="nav-link" href="{{ url('/mycart') }}"> 4 <i class="fas fa-cart-arrow-down"></i> 5 <span class="circle"> 6 {{$count ??''}}←ここに個数を表示したい 7 </span> 8 </a> 9</li> 10//中略
試したこと
mycart.blade.phpではなく、app.blade.phpに変数を渡せるか、コントローラーのメソッドを書き換えて試しました。
↓コントローラー(ShopController.php)
php
1 public function myCart(Cart $cart) 2 { 3 $data = $cart->showCart();//showCartメソッドの実行結果を格納 4 return view('app', $data); 5 }
変数が渡らないどころか/mycartにアクセスすると
View [app] not found.のエラーが表示されます。
mycart.blade.phpとはファイルパスが違うのでこの書き方はできないのかもしれません。
・アプリディレクトリ\resources\views\layouts\app.blade.php
・アプリディレクトリ\resources\views\mycart.blade.php
共通テンプレートのビューファイルに変数を渡すという発想はそもそも正しいのでしょうか?
また、書き方はあるのでしょうか?
知恵を貸していただきたいです。
補足情報(FW/ツールのバージョンなど)
larabel6
回答3件
あなたの回答
tips
プレビュー