簡體   English   中英

如何在laravel的表單操作中傳遞值

[英]How to pass a value in a form action in laravel

我有一個視圖列出數據庫中的所有對象,並為每個對象創建一個表單以保存到不同的表。 我的問題是,該值沒有傳遞給我的函數。

這是我的blade.php 文件:

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-12">
            <div class="card">
                <div class="card-header">{{ __('Items') }}</div>
                <div class="card-body">
                    <div class="row">
                    @foreach($items as $item)
                        <div class="col-md-3 col-xs-12">
                            <div class="card">
                                <img src="..." class="card-img-top" alt="...">
                                <div class="card-body">
                                    <h5 class="card-title">{{ $item->name }}</h5>
                                    <p class="card-text">$ {{ $item->price }}</p>
                                    @auth
                                    <form method="post" action="{{ route('carts.store', $item) }}"> 
                                        @csrf
                                        @method('post')
                                        <button type="submit" class="form-control btn">add to cart</button>
                                    </form>
                                    @endauth

                                    <form method="post" action="{{ route('item.destroy', $item) }}"> 
                                        @csrf
                                        @method('delete')
                                        <button type="submit" class="form-control btn btn-danger">delete</button>
                                    </form>
                                </div>
                            </div>
                        </div>
                    @endforeach
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

和我在 CartsController 中的功能:

public function store(Item $item)
{
    $cart = new Cart();
    $cart->user_id = auth()->id();
    $cart->item_id = $item->id;
    
    $cart->save();

    return redirect('/item');
}

當我單擊添加到購物車時,出現此錯誤:

SQLSTATE[23000]:違反完整性約束:1048 列“item_id”不能為空(SQL:插入“購物車”(“user_id”、“item_id”、“updated_at”、“created_at”)值(1、?、2020- 08-24 07:35:44, 2020-08-24 07:35:44))

我試過將 id 直接傳遞給函數,但這似乎也不起作用。 我很困惑為什么會發生這種情況,因為我可以在兩行之前毫無問題地使用$item

如果您的路由模型綁定設置正確,則實際上是將對象的id還是對象本身傳遞給route()函數並不重要。

https://laravel.com/docs/7.x/routing#implicit-binding

當您運行php artisan route:list ,您應該會看到類似以下內容:

POST | cart/store/item/{item} | carts.store | App\Http\Controllers\CartController@store 

Laravel 會自動解析在路由或控制器操作中定義的 Eloquent 模型,這些模型的類型提示變量名稱與路由段名稱匹配。

因此,以下任何一項實際上都有效

{{ route('carts.store', $item) }}

或者

{{ route('carts.store', $item->id) }}

或者

{{ route('carts.store', ['item' =>  $item->id]) }}

應該都解決同一件事。


附錄

因此,您使用的路線沒有您的項目的路線參數(即{item} ),因此它不會知道您正在引用哪個Item對象。

您可以:

  1. 修改您的路線以包含此路線參數

或者

  1. 改用Request對象來解析Item

刀刃

<form method="post" action="{{ route('carts.store') }}"> 
    @csrf
    @method('post')
    <input type="hidden" name="item_id" value="{{ $item->id }}">
    <button type="submit" class="form-control btn">add to cart</button>
</form>

控制器

public function store(Request $request)
{
    $cart = new Cart();
    $cart->user_id = auth()->id();
    $cart->item_id = $request->item_id;
    
    $cart->save();

    return redirect('/item');
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM