gpt4 book ai didi

php - 如何在 laravel 的表单 Action 中传递一个值

转载 作者:行者123 更新时间:2023-12-04 09:01:11 25 4
gpt4 key购买 nike

我有一个列出数据库中所有对象的 View ,并为每个对象创建一个表单以保存到不同的表中。我的问题是,该值没有传递给我的函数。
这是我的 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]: Integrity constraint violation: 1048 Column 'item_id' cannot be null (SQL: insert into `carts` (`user_id`, `item_id`, `updated_at`, `created_at`) values (1, ?, 2020-08-24 07:35:44, 2020-08-24 07:35:44))


我尝试将 id 直接传递给函数,但这似乎也不起作用。我很困惑为什么会这样,因为我可以使用 $item早两排没问题。

最佳答案

如果您的路由模型绑定(bind)设置正确,那么您是否通过 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 automatically resolves Eloquent models defined in routes or controller actions whose type-hinted variable names match a route segment name.


因此,以下任何一项实际上都会起作用
{{ route('carts.store', $item) }}
或者
{{ route('carts.store', $item->id) }}
或者
{{ route('carts.store', ['item' =>  $item->id]) }}
所有人都应该解决同一件事。

附录
因此,您使用的路线没有您的项目的路线参数(即 {item} ),因此它不会知道哪个 Item您引用的对象。
您可以:
  • 修改您的路线以包含此路线参数

  • 或者
  • 使用 Request对象解决Item反而。

  • Blade
    <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>
    Controller
    public function store(Request $request)
    {
    $cart = new Cart();
    $cart->user_id = auth()->id();
    $cart->item_id = $request->item_id;

    $cart->save();

    return redirect('/item');
    }

    关于php - 如何在 laravel 的表单 Action 中传递一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63556756/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com