使用Laravel中的路由删除我的数据库记录?

时间:2018-08-12 10:02:57

标签: php laravel http-delete

我正在使用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表格?

2 个答案:

答案 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参数发送到路由。