Я пытаюсь создать новый «воздушно-десантный» тест в моей программе и получаю исключение 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>
Насколько мне известно, формы не имеют атрибута 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>
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
Прежде всего
Форма не имеет атрибута 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) }}">