Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Ребят, привет. Помогите плиз новичку разобраться, почему не удаляются записи?
В общем код в контролере:
public function destroy($id){
Companies::find($id)->delete();
return redirect()->route('companies.index')->with('success', 'Компания удалена');
}
В web.php роут, записи не удаляются (просто происходит переход на страницу просмотра записи):
Route::resource("/companies", "CompaniesController");
Но если роут на удаление прописать отдельно так, то все удаление происходит:
Route::get('/companies/{id}/delete', 'CompaniesController@destroy')->name('companies.destroy');
В чем прикол? Хотел по-людски, чтобы меньше кода было, но не тут то было... Что я не учел?
---
Остальные функции работают
laravel 5.8.38
php 7.4.2
Изменено Andry100500 (14.07.2020 00:10:58)
Не в сети
Скорее всего в форме не прописан метод. Для удаление нужно `@method('delete')`
Не в сети
100% не приписан, у меня вообще там формы нет, так сделано:
<a class="btn btn-lg btn-danger" href="{{ route('companies.destroy', $element->id) }}" role="button">Удалить</a>
А есть пример, как правильно делать? Или может где-то обсуждалось?
Не в сети
Посмотрите здесь
Не в сети
Andry100500, первое что нужно, это иметь в виду методы HTTP. Есть GET, POST, PUT и DELETE (могут быть и другие). Когда ты просто переходишь по ссылке, набрав адрес в строке браузера или перейдя по ссылке <a href>, это GET. А Route::resource() связывает Controller::destroy() с методом DELETE. Никак не c GET.
Есть правило хорошего тона: никогда не изменять данные в обработчике метода GET. И ресурсный контроллер его придерживается. Короче говоря, если ты хочешь чтоы срабатывал destroy(), сделай так чтобы Javascript вызвал метод DELETE.
Так как браузеры традиционно использовали только GET и POST, придумали такой трюк: использовать для всех недостающих http-методов специальную переменную с именем _method.
Можно сделать форму с method=POST, а в ней "псевдо-" поле <input type="hidden" name="_method" value="DELETE">, именно для этого служит конструкция @method()
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Ребят, прям шикарно помогли. Спасибо огромное!
Не в сети
Страницы 1