Люмен: Как удалить запись из БД?

Используя 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');
}
Другие вопросы по тегам