Laravel Exception 405 MethodNotAllowed - PullRequest
       42

Laravel Exception 405 MethodNotAllowed

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

Я пытаюсь создать новый "воздушно-капельный" тест в своей программе и получаю исключение 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 ]

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

По моим сведениям, формы не имеют атрибута href.Я думаю, вы предполагаете написать Действие , но написали href .Укажите атрибут action в форме, которую вы пытаетесь отправить.

<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>
0 голосов
/ 10 декабря 2018

Прежде всего
Форма не имеет атрибута 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 голосов
/ 08 декабря 2018

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

Именованные маршруты

Рассмотрите возможность использования именованных маршрутов для обеспечения удобногогенерация URL или перенаправлений.Как правило, их легче обслуживать.

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

Коллектив Laravel

Используйте форму Коллектива Laravel: откройте тег и удалите 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
...