подделать метод запроса в вспомогательном методе laravel action ()?

В проекте Laravel 5.5 у меня есть студенческий контроллер с destory метод.

public function destroy(Student $student)
{
//destroy $student and redirect
}

У меня есть маршрут для контроллера следующим образом

Route::delete('/student/{id}', 'StudentController@destroy');

Теперь давайте перейдем к вопросу.

У меня есть страница для управления студентами и кнопка удаления.

  <a class="btn btn-danger"href="{{ action('StudentController@destroy', ['id' => $student->id]) }}" >
Delete
</a>

когда я нажимаю кнопку удаления, он выбрасывает method not allowed exception так как запрос не является запросом на удаление. Есть ли способ / обходной путь, чтобы указать / подделать метод запроса через action()/route() вспомогательные функции?

Обычно я бы создал форму со скрытым _method="delete" введите и опубликуйте форму. но если я добавлю кнопку обновления, то мне придется создать другую форму со скрытым _method="patch" в этом, и я не думаю, что это хорошая практика.

пожалуйста, дайте несколько идей, чтобы идти вперед.

2

Решение

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

Есть и еще одна причина, почему вы не должны использовать ссылки и методы GET для этого. Например, давайте предположим, что ваш URL для удаления ученика выглядит так:

http://example.com/students/1/delete

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

Конечно, в приведенном выше примере вы можете использовать JavaScript, который будет запускаться при нажатии на ссылку, которая будет выполнять допустимое действие HTTP, но это может означать больше работы, чем использование простой формы.

2

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

Есть 2 способа, которыми я могу думать об этом:

  1. Создать форму методом DELETE

    {!! Form::model($student, ['method' => 'DELETE', 'action' => ['StudentController@destroy', $student->id]]) !!}
    {!! Form::submit('Delete', ['class' => 'btn btn-danger']) !!}
    {!! Form::close() !!}
    
  2. Создайте ajax-запрос с типом запроса DELETE

    $.ajax({
    url: '/students/'+id+'/delete,
    type: "DELETE",
    data:{ _token: "{{ csrf_token() }}" }
    });
    
1

По вопросам рекламы [email protected]