【问题标题】:MethodNotAllowedHttpExceptionMethodNotAllowedHttpException
【发布时间】:2017-08-13 18:57:31
【问题描述】:

我正在尝试更新数据库中的字段,但我不能

这是我的路线:

Route::get('orders', [
    'uses' => 'OrderController@postOrder',
    'as'   => 'order.show'
]);

这里是控制器:

        public function postOrder()
    {
        $this->orderForm->validate(Input::all());
        $order = $this->orders->getNew([
            'link'       => Input::post('link'),
            'size'       => Input::post('size'),
            'color'       => Input::post('color')
        ]);
        $this->orders->save($order);
        return Redirect::back()->withMessage('Order has been updated');
    }

这是刀片:

{{ Form::open() }}
        <div class="box-body">
            <div class="row">
                <div class="col-lg-6">
                    <div class="form-group">

                        {{ Form::label('title', 'Product:') }}
                        {{ Form::text('title', $order->title, ['class' => 'form-control', ]) }}
                    </div>
                </div>
                <div class="col-lg-6">
                    <div class="form-group">
                        {{ Form::label('link', 'Link:') }}
                        {{ Form::text('link', $order->link, ['class' => 'form-control']) }}
                    </div>
                </div>
            </div>
            <div class="row">
                <div class="col-lg-6">
                    <div class="form-group">
                        {{ Form::label('size', 'Size:') }}
                        {{ Form::text('size', $order->size, ['class' => 'form-control']) }}
                    </div>
                </div>
                <div class="col-lg-6">

            </div>
        </div>
        <div class="box-footer">
            {{ Form::submit('Save', ['class' => 'btn btn-primary']) }}
        </div>
        {{ Form::close() }}

所以每次我尝试更新订单时都会收到错误“MethodNotAllowedHttpException”,我尝试了很多方法但我迷路了。我还是 php 的初学者,这个问题让我发疯,所以如果你能帮助大家,我会很高兴。

谢谢

***我已经更新了代码

【问题讨论】:

    标签: php html sql laravel


    【解决方案1】:

    所以你要发布到路线/orders。因此,您需要一个HTTP POST request。您现在正在将 GET 请求分配给 /orders 路由。

    您需要将代码更改为:

    Route::post('orders', [
        'uses' => 'OrderController@postOrder',
        'as'   => 'order.show'
    ]);
    

    您还需要添加CSRF Token,这可以通过在刀片中添加{!! csrf_field() !!} 来完成(在您的表单打开和关闭中)。

    {{ Form::open() }}
        {!! csrf_field() !!}
        <div class="box-body">
            <div class="row">
                <div class="col-lg-6">
                    <div class="form-group">
    
                        {{ Form::label('title', 'Product:') }}
                        {{ Form::text('title', $order->title, ['class' => 'form-control', ]) }}
                    </div>
                </div>
                <div class="col-lg-6">
                    <div class="form-group">
                        {{ Form::label('link', 'Link:') }}
                        {{ Form::text('link', $order->link, ['class' => 'form-control']) }}
                    </div>
                </div>
            </div>
            <div class="row">
                <div class="col-lg-6">
                    <div class="form-group">
                        {{ Form::label('size', 'Size:') }}
                        {{ Form::text('size', $order->size, ['class' => 'form-control']) }}
                    </div>
                </div>
                <div class="col-lg-6">
    
            </div>
        </div>
        <div class="box-footer">
            {{ Form::submit('Save', ['class' => 'btn btn-primary']) }}
        </div>
    {{ Form::close() }}
    

    希望这行得通!

    【讨论】:

      【解决方案2】:

      您必须在 Form::open 方法中指定方法。

      {{ Form::open(array('method' => 'post')) }}
      

      【讨论】:

      • @Kovah 我已经按照你的建议做了,现在我收到了这个错误“validation.required”,我想我知道如何解决,所以我会给它试一试。谢谢
      【解决方案3】:

      刚刚在存储库中添加了这个:

      public function updateOrder($id, array $data)
      {
          $orders = $this->getById($id);
      
          if (!empty($data['title'])) {
              $orders->title = $data['title'];
          }
      
          if (!empty($data['link'])) {
              $orders->link = $data['link'];
          }
      
        (AND SO ON)
      
          $orders->save();
      

      在控制器中:

          public function postOrder($id)
      {
          $this->orders->updateOrder($id, Input::all());
      
          return Redirect::back()->withMessage('Updated');
      }
      

      就是这样

      【讨论】:

        猜你喜欢
        • 2018-01-08
        • 1970-01-01
        • 2019-04-15
        • 2013-07-04
        • 2015-09-11
        • 2017-12-21
        • 2018-02-28
        • 2016-08-31
        • 2018-01-13
        相关资源
        最近更新 更多