【问题标题】:PHP routing: The GET method is not supported for this route. Supported methods: POSTPHP 路由:此路由不支持 GET 方法。支持的方法:POST
【发布时间】:2020-02-09 19:40:37
【问题描述】:

我有一个定义如下的 HTML 表单:

<form action="{{route('save.checkout')}}" method="POST">
  {{csrf_field()}}
  <input name="amount" type="hidden" value="{{session()->get('cart')->totalprice}}">
  <div class="cart_navigation">
    <a class="continue-btn" href="#">
      <i class="fa fa-arrow-left"> </i>&nbsp; خرید را ادامه دهید
    </a> 
    <a class="checkout-btn" href="{{route('save.checkout')}}">
      <i class="fa fa-check"></i> ادامه به  پرداخت
    </a>
  </div>
</form>

提交表单时抛出以下错误:

The GET method is not supported for this route. Supported methods: POST.

我的路线是:

route::post('/savecheckout','BasketController@checkout')->name('save.checkout');

和结帐功能:

public function checkout(Request $request){
  $user = auth()->user()->id;
  $order = new order();
  $order->user_id = $user;
  $order->amount = $request->input('amount');
  $order->status = 0;
  $order->save();
  $order = order::where('status' ,0)->where('user_id', $user)->first();
  return view('checkout.index', compact('order'));
}

【问题讨论】:

  • 你当前使用的服务器是php artisan server,或者是Nginx或者其他类型的服务器
  • 为了清楚起见,我重新表述了这个问题。添加有助于阅读问题的正确格式非常有帮助。为了便于阅读,我重新格式化了 HTML 和 PHP 部分。
  • 您还有其他具有相同端点的 get 路由吗?或者你能展示你的路线以便更好地理解吗?
  • @MrLizzard 是的,我使用 php artisan serve

标签: php laravel-5 routes


【解决方案1】:

我解决了这个问题。这是一个愚蠢的错误,我将按钮类型更改为提交

【讨论】:

    【解决方案2】:

    如果你是从 Laravel 开始的,那么我想贡献一些东西来让你的编程在未来的项目中变得更好、更安全。

    • 始终验证您的输入
    • 使用 try & catch 块
    • 向您的用户显示适当的错误消息,以便您也可以 以后调试它。

    所以修改后的代码如下所示:

    public function checkout(Request $request){
        // use Validator; (add this after namespace to import validator)
        $validator = Validator::make($request->all(),[
            'user_id' => 'required|integer|max:11',
            'amount' => 'required|numeric',
            'status' => 'sometimes|integer|max:1',
        ]);
    
        if($validator->fails()) {
            return back()->withErrors($validator);
        }
        try {
            $user = auth()->user()->id;
            $order = new order();
            $order->user_id = $user;
            $order->amount = $request->input('amount');
            $order->status = 0;
            $order->save();
            $request->session()->flash('message', 'Order Successfully Created');
            $order = order::where('status' ,0)->where('user_id', $user)->first();
            return view('checkout.index', compact('order'));
        } catch (\Exception $e){
            dd($e->getMessage()); // it will show the error message with, you can replace this block with redirect code or anything else..
        }
    }
    

    为了在前端显示错误和成功消息,请在结帐中使用下面的代码 > index.blade.php 模板(只是一个示例代码,您可以使用自己的 CSS 和样式使其更好)

    @if(session()->has('message'))
        <div class="alert alert-success">
            {{ session()->get('message') }}
        </div>
    @endif
    @if(count($errors) > 0)
        <div class="note note-error">
            <h4>Error..!!</h4>
            <p>
                @foreach($errors->all() as $error)
                    <div class="alert alert-danger fade in m-b-15">
                    <i class="fa fa-chevron-right"></i>
                    {{ $error }}
                    <span class="close" data-dismiss="alert">&times;</span></div>
                @endforeach
            </p>
        </div>
    @endif
    

    【讨论】:

      猜你喜欢
      • 2020-09-04
      • 1970-01-01
      • 2019-08-28
      • 2021-04-11
      • 2019-08-31
      • 2021-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多