Люмен: Как удалить запись из БД?
Используя Lumen, я показываю "Билеты". Вот мой Tickets.blade.php
:
@foreach($tickets as $ticket)
<div>
<p>{{ $ticket->id }}</p>
<p>{{ $ticket->content }}</p>
<button onclick="deleteTicket({{$ticket->id}})">Delete</button>
</div>
@endforeach
По сути, каждый раз, когда кто-то нажимает кнопку "Удалить", он запускает этот скрипт
<script>
function deleteTicket(id) {
jQuery.ajax({
type: "post",
url: "/tickets/deleteTicket",
data: id,
dataType: "text",
success: function () {
console.log('deleted!');
}
});
}
</script>
В моем routes.php
, У меня есть это:
$app->post('tickets/deleteTicket','TicketsController@deleteTicket');
Наконец, по моему TicketsController.php
, Я имею:
public function deleteTicket($id) {
$ticket = Ticket::find($id);
$ticket->delete();
return redirect('/tickets');
}
Проблема, которую я получаю, когда нажимаю кнопку (консоль):
POST http://example.com/tickets/deleteTicket 404 (не найден)
Я не понимаю, что я делаю неправильно, и почему этот метод не найден. Кто-нибудь может помочь?
РЕДАКТИРОВАТЬ- я изменил свой routes.php
чтобы:
$app->get('tickets/deleteTicket/{id}','TicketsController@deleteTicket');
Мой сценарий выглядит так же, но я изменил "тип" на get
скорее, чем post
,
Если я посещаю, этот сайт: http://mysite/tickets/deleteTicket/1
, билет будет удален, и он будет перенаправлен на tickets
стр. Но если кнопка нажата, эта ошибка происходит:
http://mysite/tickets/deleteTicket?id=3 404 (не найден)
На данный момент, я думаю, что мне просто нужно изменить мой вызов AJAX на правильный URL-адрес, но я хочу убедиться, что безопасность является проблемой.
2 ответа
Или вы можете попробовать это:
routes.php
$app->get('tickets/deleteTicket/{id}','TicketsController@deleteTicket');
Хорошо, вот ваш клинок: добавьте класс к кнопке и удалите функцию при нажатии. как этот:
<button class="delete" data-id="{{$ticket->id}}>Delete</button>
И твой сценарий:
$(".delete").on("click", function(e) {
e.preventDefault();
var id = $(this).data('id');
$.ajax({
url : "tickets/deleteTicket/"+id+"",
type : "get" or "post",
success: function(data) {
alert(data);
}
});
});
Слишком много вещей, которые вы должны изменить
- в JS
url: "/tickets/deleteTicket", // Try change to your full URL with http://
data: id, // Change to data: "id="+id,
- в контроллере
public function deleteTicket(Request $request) {
$ticket = Ticket::find($request->id);
$ticket->delete();
return redirect('/tickets');
}