Laravel Exception 405 MethodNotAllowed

Я пытаюсь создать новый «воздушно-десантный» тест в моей программе и получаю исключение 405 MethodNotAllowed.

Маршруты

Route::post('/testing/{id}/airbornes/create', [
'uses' => 'AirborneController@create'
]);

контроллер

public function create(Request $request, $id)
{
$airborne = new Airborne;

$newairborne = $airborne->newAirborne($request, $id);

return redirect('/testing/' . $id . '/airbornes/' . $newairborne)->with(['id' => $id, 'airborneid' => $newairborne]);
}

Посмотреть

<form class="sisform" role="form" method="POST" href="{{ URL::to('AirborneController@create', $id) }}">
{{ csrf_field() }}
{!! Form::token(); !!}
<button type="submit" name="submit" value="submit" class="btn btn-success">
<i class="fas fa-plus fa-sm"></i> Create
</button>
</form>

3

Решение

Насколько мне известно, формы не имеют атрибута href. Я думаю, что вы предполагаете написать действие но написал HREF.
Пожалуйста уточни действие атрибут в форме, которую вы пытаетесь отправить.

<form method="<POST or GET>" action="<to which URL you want to submit the form>">

в вашем случае это

<form method="POST" ></form>

И атрибут действия отсутствует. Если атрибут действия отсутствует или имеет значение «» (пустая строка), форма отправляется сама себе (тот же URL-адрес).

Например, вы определили маршрут для отображения формы как

Route::get('/airbornes/show', [
'uses' => 'AirborneController@show'
'as' => 'airborne.show'
]);

а затем вы отправляете форму без атрибута действия. Он отправит форму тому же маршруту, на котором он находится в данный момент, и будет искать метод post с тем же маршрутом, но у вас нет такого же маршрута с методом POST. поэтому вы получаете исключение MethodNotAllowed.

Либо определите тот же маршрут с помощью метода post, либо явно укажите свой атрибут действия тега HTML-формы.

Допустим, у вас есть маршрут, определенный для отправки формы

Route::post('/airbornes/create', [
'uses' => 'AirborneController@create'
'as' => 'airborne.create'
]);

Таким образом, ваш тег формы должен быть похож

<form method="POST" action="{{ route('airborne.create') }}">
//your HTML here
</form>
1

Другие решения

MethodNotAllowedHttpException Указывает, что ваш маршрут недоступен для указанного метода HTTP-запроса. Возможно, либо потому, что он не определен правильно, либо конфликтует с другим аналогично названным маршрутом.

Названные маршруты

Подумайте об использовании именованных маршрутов, чтобы обеспечить удобную генерацию URL-адресов или перенаправлений. Они вообще могут быть намного легче поддерживать.

Route::post('/airborne/create/testing/{id}', [
'as' => 'airborne.create',
'uses' => 'AirborneController@create'
]);

Laravel Collective

Используйте форму Laravel Collective: откройте тег и удалите Form :: token ()

{!! Form::open(['route' => ['airborne.create', $id], 'method' =>'post']) !!}

<button type="submit" name="submit" value="submit" class="btn btn-success">
<i class="fas fa-plus fa-sm"></i> Create
</button>

{!! Form::close() !!}

вспомогательная функция dd ()

Функция dd сбрасывает данные переменные и завершает выполнение скрипта. Дважды проверьте, что ваш класс Airborne возвращает ожидаемый объект или идентификатор.

dd($newairborne)

Список доступных маршрутов

Всегда проверяйте, совпадают ли определенные вами маршруты, виды и действия.

php artisan route:list --sort name
1

Прежде всего
Форма не имеет атрибута href, она имеет «action«

<form class="sisform" role="form" method="POST" action="{{ URL::to('AirborneController@create', $id) }}">

во-вторых
Если указанное выше изменение не работает, вы можете внести некоторые изменения, такие как:

1. Маршрут
Дайте вашему маршруту имя как:

Route::post('/testing/{id}/airbornes/create', [
'uses' => 'AirborneController@create',
'as'   => 'airborne.create',         // <---------------
]);

2. Просмотр
Дайте название маршрута с route() метод в форме действия, а не URL::to() метод:

<form class="sisform" role="form" method="POST" action="{{ route('airborne.create', $id) }}">
0
По вопросам рекламы [email protected]