API post 请求未到达应用程序

API post request not reaching the application

我是 laravel 的新手,我正面临一个痛苦的问题。

我在我的电子商务中使用 Crinsane/LaravelShoppingcart api 并且我正在尝试在 vuejs 中发送带有 axios 的 post 请求,通过发送产品编号和数量。问题是 id 和数量没有到达应用程序,尽管我很确定我在 axios 中指定了正确的路线 link 并且我得到“没有模型 [App\Product] 的查询结果。”我假设这意味着处理请求的控制器功能正在工作,但 id 不是 sent/transformed 到资源 collection。我不知道问题是出在我正在使用的包还是代码还是其他问题。

这是 axios 请求


   addCart(item) {
                 axios
                 .post('/api/cart/add', item)
                 .then(response => (response.data.data))
                 .catch(error => console.log(error.response.data))

这是路线:

Route::post('cart/add', [
  'uses' =>  'ShoppingController@store',
  'as' => 'cart.add'
]);

这是购物车collection

  public function toArray($request)
    {
      return [
        'id' => $this->id,
        'qty' => $this->qty
      ];
    }

这是控制器

    public function store(){

      $pdt = Product::findOrFail(request()->id);
      
      $cart = Cart::add([
        'id' => $pdt->id,
        'name' => $pdt->name,
        'qty' => request()->qty,
        'price' => $pdt->price
      ]);

这是产品型号

class Product extends Model
{
    protected $fillable = [
      'name', 'description', 'image', 'category', 'quantity', 'price', 'sold','remaining','rating', 'bestSelling', 'featured'
    ];

}

提前致谢

问题似乎出在您的控制器上。

来自docs

To obtain an instance of the current HTTP request via dependency injection, you should type-hint the Illuminate\Http\Request class on your controller method.

试试这个:

public function store(Request, $request){
      // Make sure the 'id' exists in the request
      if ($request->get('id')) {
        $pdt = Product::find($request->get('id'));

        if ($request->get('qty')) {
          $qty = $request->get('qty')
        }

        $cart = Cart::add([
          'id' => $pdt->id,
          'name' => $pdt->name,
          'qty' => $qty,
          'price' => $pdt->price
        ]);
      }

然后,在您的控制器顶部,添加:

use Illuminate\Http\Request;

所以我发现它需要一个 json 对象才能工作,我不得不将这段代码放在存储方法的末尾:

return response()->json(['cart' => $cart], 201);