【问题标题】:laravel-5.8:The POST method is not supported for this route. Supported methods: GET, HEADlaravel-5.8:此路由不支持 POST 方法。支持的方法:GET、HEAD
【发布时间】:2020-01-22 05:45:12
【问题描述】:

您好,我正在尝试在购物车中添加产品,但它显示:此路线不支持 POST 方法。支持的方法:GET,HEAD ..(查看:\resources\views\product\detail.blade.php),我希望通过单击 addtocart 将我重定向到产品的那个时代,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,... …………………………………..,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

路线:

  Route::get('cart', 'Admin\ProductController@cart')->name('product.cart');

  Route::get('/addToCart/{product}', 'Admin\ProductController@addToCart')->name('addToCart');

控制器:

  public function cart()
  {
    if (!Session::has('cart')) {
        return view('products.cart');
    }
    $cart = Session::has('cart');
    return view('product.cart', compact('cart'));
  }

  public function addToCart(Product $product, Request $request)
  {
    if(empty(Auth::user()->email)){
        $data['email'] = '';    
    }else{
        $data['email'] = Auth::user()->email;
    }

    $oldCart = Session::has('cart') ? Session::get('cart') : null;
    $qty = $request->qty ? $request->qty : 1;
    $cart = new Cart($oldCart);
    $cart->addProduct($product);
    Session::put('cart', $cart);

    return redirect()->back()->with('flash_message_success', 'Product $product->title has been successfully added to Cart');
    }

查看:

   <form method="POST" action="{{ route('addToCart') }}" enctype="multipart/form-data">
                        <div class="btn-addcart-product-detail size9 trans-0-4 m-t-10 m-b-10">
                            @if($product->product_status == 1)
                            <!-- Button -->
                            <button class="flex-c-m sizefull bg1 bo-rad-23 hov1 s-text1 trans-0-4">
                                Add to Cart
                            </button>
                            @else Out Of Stock @endif
                        </div>
                        </form>

型号:

  <?php

  namespace App;

  use Illuminate\Database\Eloquent\Model;

  class Cart
  {
private $contents;
private $totalQty;
private $contentsPrice;

public function __construct($oldCart){
    if ($oldCart) {
        $this->contents = $oldCart->contents;
        $this->totalQty = $oldCart->totalQty;
        $this->totalPrice = $oldCart->totalPrice;
    }
}

public function addProduct($product, $qty){
    $products = ['qty' => 0, 'price' => $product->price, 'product' => $product];
    if ($this->contents) {
        if (array_key_exists($product->slug, $this->contents)) {
            $product = $this->contents[$product->slug];
        }
    }

    $products['qty'] +=$qty;
    $products['price'] +=$product->price * $product['qty'];
    $this->contents[$product->slug] = $product;
    $this->totalQty+=$qty;
    $this->totalPrice += $product->price;
}

public function getContents()
{
    return $this->contents;
}
public function getTotalQty()
{
    return $this->totalQty;
}
public function getTotalPrice()
{
    return $this->totalPrice;
}
  }

【问题讨论】:

    标签: laravel eloquent laravel-5.8


    【解决方案1】:

    您的方法应该是POST。在表单中,您将其称为 Post 方法,但在 route.php 文件中,您将其定义为 get 以将其更改为 Route::post

    Route::post('/addToCart/{product}', 'Admin\ProductController@addToCart')->name('addToCart');
    

    此外,您的 route.php 文件需要 {product},因此您需要以 route 的形式传递它,因此您的操作类似于 {{ route('addToCart',$product-&gt;id) }}

    <form method="POST" action="{{ route('addToCart',$product->id) }}" enctype="multipart/form-data">
        <input type="hidden" name="_token" value="{{ csrf_token() }}">
    </form>
    

    【讨论】:

    • 通过在两个路由和表单中发布它说:419 页面已过期,并通过在双方获取它说:该路由不支持 POST 方法。支持的方法:GET、HEAD
    • 在表单下传递&lt;input type="hidden" name="_token" value="{{ csrf_token() }}"&gt;
    • 已编辑答案,请检查。
    • 在你的类定义上方添加这一行:use Illuminate\Support\Facades\Auth;
    • 在出现此错误之前您尝试了什么?至少从你身边尝试然后把它放在这里。
    【解决方案2】:

    首先,您在视图中的表单方法是POST,但您没有发布路线。

    其次,您定义的路线需要一个参数(产品),您可以更改表单操作,如下所示,但我认为您想将用户发送到另一个页面,以便您可以使用链接而不是表单。

    这是表单操作:

    action="{{ route('addToCart', $product->id) }}"
    

    如果你想使用链接,你可以这样做:

    <a href="{{ route('addToCart', $product->id) }}">.....</a>
    

    【讨论】:

    • 现在该错误已删除,但是当我单击添加到购物车 btn 时,它显示此路线不支持 POST 方法。支持的方法:GET、HEAD。
    • 我把它改成 get 但还是一样的,如果你愿意告诉我,我怎么能用like呢
    • 现在我的代码是 paste.ofcode.org/3aT3Cb7mThrzB75nRkcf9vK 但点击它会发生什么事情
    • 我的代码中有错字。先把hred改成href,就可以去掉按钮标签,把类加到标签里了。
    • 函数 App\Cart::addProduct() 的参数太少,在第 193 行的 app\Http\Controllers\Admin\ProductController.php 中传递了 1 个参数,而预期为 2 个 ibb.co/5LpNj96
    猜你喜欢
    • 2020-06-03
    • 1970-01-01
    • 2020-06-05
    • 2020-04-19
    • 2021-05-08
    • 2020-04-25
    • 1970-01-01
    • 2020-12-16
    • 2019-08-28
    相关资源
    最近更新 更多