流明:如何从数据库中删除一条记录?
Lumen: How to delete a record from DB?
使用 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 (Not Found)
我不明白我做错了什么,以及为什么找不到该方法。有人可以帮忙吗?
编辑- 我已将 routes.php
更改为:
$app->get('tickets/deleteTicket/{id}','TicketsController@deleteTicket');
我的脚本看起来一样,但我将 "type" 更改为 get
而不是 post
。
如果我访问这个站点:http://mysite/tickets/deleteTicket/1
,票证将被删除,并重定向到 tickets
页面。但是如果点击按钮,就会出现这个错误:
http://MYSITE/tickets/deleteTicket?id=3 404 (Not Found)
在这一点上,我想我只需要将我的 AJAX 调用修改为正确的 URL,但我想确保安全是一个问题。
或者你可以试试这个:
routes.php
$app->get('tickets/deleteTicket/{id}','TicketsController@deleteTicket');
好的,这是您的 blade:
将 class 添加到按钮并删除单击时的功能。像这个 :
<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');
}
使用 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 (Not Found)
我不明白我做错了什么,以及为什么找不到该方法。有人可以帮忙吗?
编辑- 我已将 routes.php
更改为:
$app->get('tickets/deleteTicket/{id}','TicketsController@deleteTicket');
我的脚本看起来一样,但我将 "type" 更改为 get
而不是 post
。
如果我访问这个站点:http://mysite/tickets/deleteTicket/1
,票证将被删除,并重定向到 tickets
页面。但是如果点击按钮,就会出现这个错误:
http://MYSITE/tickets/deleteTicket?id=3 404 (Not Found)
在这一点上,我想我只需要将我的 AJAX 调用修改为正确的 URL,但我想确保安全是一个问题。
或者你可以试试这个:
routes.php
$app->get('tickets/deleteTicket/{id}','TicketsController@deleteTicket');
好的,这是您的 blade: 将 class 添加到按钮并删除单击时的功能。像这个 :
<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');
}