В проекте 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"
в этом, и я не думаю, что это хорошая практика.
пожалуйста, дайте несколько идей, чтобы идти вперед.
Отвечая на ваш вопрос — да, вы должны создать форму, которая позволит вам удалить студента. Вот как следует использовать REST — вы не создаете обходных путей, а просто используете действительный метод HTTP для данного действия.
Есть и еще одна причина, почему вы не должны использовать ссылки и методы GET для этого. Например, давайте предположим, что ваш URL для удаления ученика выглядит так:
http://example.com/students/1/delete
Когда вы набираете URL в браузере, браузеры обычно запоминают предыдущие URL, поэтому вы можете удалить некоторых студентов по ошибке, если вы использовали метод GET для удаления студентов.
Конечно, в приведенном выше примере вы можете использовать JavaScript, который будет запускаться при нажатии на ссылку, которая будет выполнять допустимое действие HTTP, но это может означать больше работы, чем использование простой формы.
Есть 2 способа, которыми я могу думать об этом:
Создать форму методом DELETE
{!! Form::model($student, ['method' => 'DELETE', 'action' => ['StudentController@destroy', $student->id]]) !!}
{!! Form::submit('Delete', ['class' => 'btn btn-danger']) !!}
{!! Form::close() !!}
Создайте ajax-запрос с типом запроса DELETE
$.ajax({
url: '/students/'+id+'/delete,
type: "DELETE",
data:{ _token: "{{ csrf_token() }}" }
});