質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

0回答

394閲覧

[Laravel5.5]Laravel Shoppingcart + Vueでのショッピングカート実装について

DaisukeMori

総合スコア225

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/02/17 07:30

編集2019/02/17 07:34

現在、Laravel Shoppingcart + Vueについてチュートリアルを進めているのですが、
カートを入れるボタンを押すと下記エラーが出てしまいます。

サイトを見ながら同じように進めているのですが、原因がよくわかりません。
チュートリアルサイトの中で「addCart: function(index)」の場所が詳しく書かれていませんでしたが、おそらくVue.jsのmethodだろうと予測し、以下のように書きましたが、こちらで問題ないかも併せて御指南いただければと思います。

[チュートリアルサイト]
リンク内容

error

1TypeError: this.$refs.qty is undefined[詳細] products:54:29 2 3 addCart http://192.168.10.10/products:54 addCart self-hosted:974 click3VueJS

 
resources/views/products/index.blade.php

html

1<html> 2<head> 3 <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet"> 4</head> 5<body style="padding-top: 10px;"> 6 <div id="app"> 7 <div class="container"> 8 <div class="float-right"> 9 カートの中身: <span class="badge badge-pill badge-light" v-text="Object.keys(cartItems).length"></span>10 </div> 11 <h1>商品一覧</h1> 12 <div class="row"> 13 <div v-for="(product,index) in products" class="col-sm-4"> 14 <div class="card border-info"> 15 <div class="card-body"> 16 <h5 class="card-title" v-text="product.name"></h5> 17 <p class="card-text"> 18 <label>サイズ:</label> 19 <select ref="size" class="form-control"> 20 <option v-for="size in product.sizes" :value="size" v-text="size"></option> 21 </select> 22 </p> 23 <p class="card-text"> 24 <label>個数:</label> 25 <input ref="size" type="number" class="form-control" min="0" value="0"> 26 </p> 27 </div> 28 <div class="card-footer text-right"> 29 <button type="button" class="btn btn-info" @click="addCart(index)">カートへ入れる</button> 30 </div> 31 </div> 32 <br> 33 </div> 34 </div> 35 </div> 36 </div> 37 <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.min.js"></script> 38 <script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js"></script> 39 <script> 40 41 new Vue({ 42 el: '#app', 43 data: { 44 products: [], 45 cartItems: {} 46 }, 47 methods: { 48 addCart: function(index) { 49 50 if(confirm('カートへ追加します。よろしいですか?')) { 51 52 var self = this; 53 var size = this.$refs.size[index].value; 54 var qty = this.$refs.qty[index].value; 55 var product = this.products[index]; 56 57 var url = '/ajax/carts'; 58 var params = { 59 size: size, 60 qty: qty, 61 productId: product.id 62 }; 63 axios.post(url, params) 64 .then(function(response){ 65 66 self.cartItems = response.data; 67 68 }); 69 70 } 71 72 }, 73 getProducts: function() { 74 75 var self = this; 76 axios.get('/ajax/products') 77 .then(function(response){ 78 79 self.products = response.data; 80 81 }); 82 83 } 84 }, 85 mounted: function() { 86 87 this.getProducts(); 88 89 } 90 }); 91 92 </script> 93</body> 94</html>

php

1 2namespace App\Http\Controllers\Ajax; 3 4use Illuminate\Http\Request; 5use App\Http\Controllers\Controller; 6 7class CartController extends Controller 8{ 9 // 中略 10 11 public function store(Request $request) 12 { 13 $product = \App\Product::find($request->product_id); 14 \Cart::add( 15 $product->id, 16 $product->name, 17 $request->qty, 18 $product->amount, 19 ['size' => $request->size] 20 ); 21 return \Cart::content(); 22 }

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問