Laravel - при обновлении всегда выдается «MethodNotAllowedHttpException No message» - PullRequest
0 голосов
/ 13 декабря 2018

Из моего исследования эта ошибка связана с ошибкой маршрутизации.Поскольку эта ошибка выдается независимо от кода, который я использую в своей функции обновления, это имеет смысл.

Однако я считаю, что все мои маршруты / формы являются правильными:

web.php

Route::get('orders/edit/{order}', 'OrderController@edit')->name('orders.edit');
Route::patch('orders/update', 'OrderController@update')->name('orders.update');

OrderController.php

public function edit(Order $order)
{
    $user = Auth::user();
    $meals = DB::table('products')
              ->leftJoin('order_product', function ($join) use ($order) {
                  $join->on('products.id', '=', 'order_product.product_id')
                       ->where('order_product.order_id', '=', $order->id);
              })
              ->select('products.*', 'order_product.qty')
              ->get();

    return view('orders.edit', compact('order', 'products', 'meals'));
}

public function update(Request $request,Order $order)
{
    //doesnt seem to matter what is in here but this is my return
    return redirect()->route('orders.checkout', $order->id);
}

edit.blade.php

{!! Form::open(['route' => 'orders.update', 'method' => 'patch']) !!}
    {{ Form::text('coupon', $order->coupon) }} // sample of an input I am using
    {{ Form::submit('Place Order') }}
{!! Form::close() !!}

ОБНОВЛЕНИЕ

в соответствии с предложением @ rpm192, я попытался:

{!! Form::open(['action' => ['orders.update', $order->id], 'method' => 'patch']) !!}

, но затем при загрузке edit.blade.php он меня выбрасывает...

Action App\Http\Controllers\orders.update not defined. (View: /Users/now/Public/keto/resources/views/orders/edit.blade.php)

так что я тогда попытался ...

{!! Form::open(['action' => ['OrderController@update', $order->id], 'method' => 'patch']) !!}

но это бросает меня ...

Too few arguments to function App\Http\Controllers\OrderController::update(), 1 passed and exactly 2 expected

при условии, что это правильный метод, так как я сейчас приближаюсь к решению, какой дополнительный аргумент он ищет?

1 Ответ

0 голосов
/ 13 декабря 2018

Вашему контроллеру требуется запрос и идентификатор заказа (поэтому он знает, какой из них обновить).

{!! Form::open(['action' => ['OrderController@update', $order->id], 'method' => 'post']) !!} // modified this
    {{ Form::text('coupon', $order->coupon) }}

    {{ Form::hidden('_method', 'PUT') }} // added this

    {{ Form::submit('Place Order') }}
{!! Form::close() !!}

Если это не сработает, попробуйте еще раз, изменив маршрут:

// from
Route::patch('orders/update', 'OrderController@update')->name('orders.update');

// to
Route::post('orders/update/{order}', 'OrderController@update')->name('orders.update');
...