MethodNotAllowedHttpException

时间:2017-03-21 21:31:57

标签: php html sql laravel

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

这是我的路线:

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的初学者,这个问题让我发疯,所以如果你能帮助我们,我会很高兴。

感谢

***我已更新代码

3 个答案:

答案 0 :(得分:2)

所以你要张贴到路线/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() }}

希望这有效!

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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');
}

那就是