[英]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
對象。
您可以:
或者
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.