it-swarm.com.ru

Ошибка 405 (метод не разрешен) Laravel 5

Я пытаюсь сделать POST запрос с jQuery, но я получаю ошибку 405 (Метод не разрешен), я работаю с Laravel 5

Это мой код:

jQuery

<script type="text/javascript">
    $(document).ready(function () {
        $('.delete').click(function (e){
            e.preventDefault();
            var row = $(this).parents('tr');
            var id = row.data('id');
            var form = $('#formDelete');
            var url = form.attr('action').replace(':USER_ID', id);
            var data = form.serialize();
            $.post(url, data, function (result){
                alert(result);
            });
        });
    });
    </script>

HTML

{!! Form::open(['route' => ['companiesDelete', ':USER_ID'], 'method' =>'DELETE', 'id' => 'formDelete']) !!}

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

Контроллер

public function delete($id, \Request $request){
        return $id;
    }

Ошибка Jquery: http: //localhost/laravel5.1/public/empresas/eliminar/5 405 (метод не разрешен).

Значение URL 

http://localhost/laravel5.1/public/empresas/eliminar/5

и значение данных 

_method=DELETE&_token=pCETpf1jDT1rY615o62W0UK7hs3UnTNm1t0vmIRZ.

Если я изменяю на запрос $.get, он работает нормально, но я хочу сделать пост-запрос.

Кто-нибудь может мне помочь?

Благодарю.

Правка!!

Маршрут

Route::post('empresas/eliminar/{id}', ['as' => 'companiesDelete', 'uses' => '[email protected]']);
27
German Ortiz

Исключение methodNotAllowed указывает, что для запрашиваемого вами метода HTTP не существует маршрута. 

Ваша форма настроена на отправку запроса DELETE, поэтому ваш маршрут должен использовать Route::delete() для его получения.

Route::delete('empresas/eliminar/{id}', [
        'as' => 'companiesDelete',
        'uses' => '[email protected]'
]);
34
Jeemusu

Ваш файл rout.php должен быть правильно настроен.

Что я предполагаю, что ваша текущая настройка похожа на:

Route::post('/empresas/eliminar/{id}','[email protected]');

или что-то. Вместо этого определите маршрут для метода удаления.

Route::delete('/empresas/eliminar/{id}','[email protected]');

Теперь, если вы используете ресурс Route, именем маршрута по умолчанию, которое будет использоваться для метода «DELETE», является .destroy. Вместо этого определите логику удаления в этой функции.

6
davsp

Если вы используете ресурсные маршруты , то в теле HTML формы вы можете использовать method_field helper вот так:

<form>
  {{ csrf_field() }}
  {{ method_field('PUT') }}
  <!-- ... -->
</form>

Это создаст скрытый ввод формы с типом метода, который правильно интерпретируется Laravel 5.5+.

Начиная с Laravel 5.6 вы можете использовать следующие директивы Blade в шаблонах:

<form>
  @method('put')
  @csrf
  <!-- ... -->
</form>

Надеюсь, что это может помочь кому-то в будущем.

0
mdy

Когда вы используете метод delete в форме, тогда вам нужно установить маршрут delete

Route::delete("empresas/eliminar/{id}", "[email protected]");
0
Mahbubul Alam