我正在使用Laravel,并且试图实现一种删除功能,该功能负责删除用户执行的所选任务。
我想知道如何使用路线实现这一目标?
<a href="{{ route("tasks.edit", ["id" => $task->id]) }}"><button class="btn btn-outline-light">Edit</button></a>
<a href="{{ route("tasks.destroy", ["id" => $task->id]) }}"><button class="btn btn-outline-light">Delete</button></a>
此刻,我的删除路线将我带到编辑路线所在的页面。
我的删除功能:
public function destroy(Task $task)
{
$task->delete();
return redirect('/tasks')->with('success', 'Task removed');
}
我使用Laravel表单获得了有效的删除功能:
{!! Form::open(['action' => ['TasksController@destroy', $task->id], 'method' => 'POST', 'class'=> 'float-right']) !!}
{{Form::hidden('_method','DELETE')}}
{{Form::submit('Delete', ['class' => 'btn btn-outline-danger'])}}
{!! Form::close() !!}
是否值得考虑另一种方法来处理删除操作,还是应该坚持使用Laravel表格?
答案 0 :(得分:0)
那是由于CSRF保护。您可能会考虑使用ajax请求。 您可以在这篇文章中找到一个示例。 How to delete record in laravel 5.3 using ajax request?
答案 1 :(得分:0)
当您按下Delete链接时,您基本上将向task.destroy路由发出GET请求,这不是您想要的。您可以创建一个表单,然后单击提交(laravel注销btn做类似的事情)
<a href="#"
onclick="event.preventDefault(); document.getElementById('task-destroy-form').submit();">
Delete task
</a>
<form id="task-destroy-form" action="{{ route("tasks.destroy", ["id" => $task->id]) }}" method="POST" style="display: none;">
{{ csrf_field() }}
<input type="hidden" name="_method" value="DELETE">
</form>
或进行ajax调用,将id和CSRF参数发送到路由。