【问题标题】:Lumen: How to delete a record from DB?Lumen:如何从数据库中删除记录?
【发布时间】:2023-03-25 19:02:01
【问题描述】:

使用 Lumen,我正在显示“Tickets”。这是我的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(未找到)

我不明白我做错了什么,以及为什么找不到该方法。有人可以帮忙吗?

EDIT- 我已将routes.php 更改为:

$app->get('tickets/deleteTicket/{id}','TicketsController@deleteTicket');

我的脚本看起来一样,但我将“类型”更改为 get 而不是 post

如果我访问此站点:http://mysite/tickets/deleteTicket/1,票证将被删除,并重定向到tickets 页面。但是如果点击按钮,就会出现这个错误:

http://MYSITE/tickets/deleteTicket?id=3404(未找到)

此时,我认为我只需将 AJAX 调用修改为正确的 URL,但我想确保安全是一个问题。

【问题讨论】:

  • 更改路线:$app->post('/tickets/deleteTicket','TicketsController@deleteTicket');
  • @hizbul25 这正是我的问题。
  • 我要改成什么?
  • 这不完全是你的问题。 $app->post('/tickets/deleteTicket','TicketsController@delete‌​Ticket');我添加了一个'/'刚刚开始的路线。试试这个。最好进来聊天。
  • @hizbul25 我确实尝试在routes.php 的 URL 开头添加一个“/”。仍然没有变化。

标签: php laravel lumen lumen-5.2 lumen-routing


【解决方案1】:

或者你可以试试这个:

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);    
       }
    });
});

【讨论】:

  • 你能不能先在你的deleteTicket函数中返回$id。像这个 public function deleteTicket($id) { return $id; } 检查是否真的有一个ID通过了路由
  • 在你的 routes.php 中试试这个: $app->get('tickets/deleteTicket/{id}, 'TicketController@deleteTicket');我在我的电脑上试过了,它可以工作。
  • 你在你的ajax函数中改变了类型吗? type : 'get' 并且仍在你的路线中 $app->get('tickets/deleteTicket/{id}, 'TicketsController@deleteTicket');
  • 可以肯定的是,直接在您的浏览器中访问该 url,例如:www.sample.com/tickets/deleteTicket/3 -> 3 这里是票证 ID,将其替换为您的任何 ID从门票表中有你的数据库只要确保你按照我给你的代码。
  • 改成这样的 url : "/tickets/deleteTicket/"+id+" ",
【解决方案2】:

你必须改变的东西太多
- 在 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');
}

【讨论】:

  • 我刚刚尝试使用 data 调整更改为完整 URL,但仍未找到该 URL。
  • 将 POST 更改为 GET 并直接从浏览器访问,以确保除了 url 之外一切正常
  • 你能举个例子吗,这是一个IP地址。
  • 把路由改成$app-&gt;get('/tickets/deleteTicket','TicketsController@delete‌​Ticket');,在Controller里面写点东西,直接通过浏览器访问http://example.com/tickets/deleteTicket
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2011-11-18
  • 2021-08-06
  • 2013-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多