Laravel 5 Laravel delete方法不使用delete谓词
在我的路由文件中,我有Laravel 5 Laravel delete方法不使用delete谓词,laravel-5,Laravel 5,在我的路由文件中,我有 Route::delete('events/{events}', ['as' => 'events_delete', 'uses' => 'Admin\EventsController@destroy'] ); 在我的视图文件中,我有 <a href="{!! route('events_delete', ['id' => $event->id ]) !!}" type="button" class="btn btn-sm btn-da
Route::delete('events/{events}', ['as' => 'events_delete', 'uses' => 'Admin\EventsController@destroy'] );
在我的视图文件中,我有
<a href="{!! route('events_delete', ['id' => $event->id ]) !!}" type="button" class="btn btn-sm btn-danger"><em class="fa fa-trash"></em></a>
它确实有效。但是,我不喜欢使用GET动词而不是delete动词来删除项目。这感觉像是个骗局
如何更改表单代码以确保它发送删除谓词
解决方案1(自下而上):使用路由文件中的删除谓词
<form action="{!! route('events_delete', ['id' => $event->id ]) !!}" method="POST">
{{ method_field('DELETE') }}
{{ csrf_field() }}
<button class="btn btn-danger btn-sm" type="submit"><em class="fa fa-trash"></em></button>
</form>
<a href="{!! route('events_delete', ['id' => $event->id ]) !!}" type="button" class="btn btn-sm btn-danger"><em class="fa fa-trash"></em></a>
{{method_field('DELETE')}
{{csrf_field()}}
解决方案2:在路由文件中使用GET谓词
<form action="{!! route('events_delete', ['id' => $event->id ]) !!}" method="POST">
{{ method_field('DELETE') }}
{{ csrf_field() }}
<button class="btn btn-danger btn-sm" type="submit"><em class="fa fa-trash"></em></button>
</form>
<a href="{!! route('events_delete', ['id' => $event->id ]) !!}" type="button" class="btn btn-sm btn-danger"><em class="fa fa-trash"></em></a>
您必须发出一个删除请求才能以这种方式使用路由,这可以通过表单来完成,否则您将通过锚点发出get请求
如果您还没有软件包,请从composer安装它以使用forms facade。然后您可以这样请求:
{!! Form::open(['method' => 'DELETE', 'route' => $yourRoute]) !!}
{!! Form::submit('Delete') !!}
{!! Form::close() !!}
编辑:
没有正面的形式:
<form action="{{ $yourRoute }}" method="POST">
{{ method_field('DELETE') }}
{{ csrf_field() }}
<button class="btn btn-danger btn-sm" type="submit"><em class="fa fa-trash"></em></button>
</form>
{{method_field('DELETE')}
{{csrf_field()}}
您必须发出一个删除请求才能以这种方式使用路由,这可以通过表单来完成,否则您将通过锚点发出get请求
如果您还没有软件包,请从composer安装它以使用forms facade。然后您可以这样请求:
{!! Form::open(['method' => 'DELETE', 'route' => $yourRoute]) !!}
{!! Form::submit('Delete') !!}
{!! Form::close() !!}
编辑:
没有正面的形式:
<form action="{{ $yourRoute }}" method="POST">
{{ method_field('DELETE') }}
{{ csrf_field() }}
<button class="btn btn-danger btn-sm" type="submit"><em class="fa fa-trash"></em></button>
</form>
{{method_field('DELETE')}
{{csrf_field()}}
将生成GET请求,因此它与Route::delete不匹配
HTML表单不支持放置、修补或删除操作。因此,在定义从HTML表单调用的PUT、PATCH或DELETE路由时,需要向表单中添加隐藏的_方法字段
参考:
要调用删除路由,必须使用jquery实现
<a eventid="{{$event->id}}" href="#" type="button" class="btn btn-sm btn-danger"><em class="fa fa-trash"></em></a>
$(document).on("click",".anchorclass",function(e){
e.preventDefault();
if(!confirm("Are you sure?")) return;
$.ajax({
type: "DELETE",
url: 'events/'+$(this).attr("eventid"),
success: function(data) {
//Process results
}
});
});
$(文档).on(单击),.anchorclass,函数(e){
e、 预防默认值();
如果(!确认(“您确定吗?”)返回;
$.ajax({
键入:“删除”,
url:'events/'+$(this.attr(“eventid”),
成功:功能(数据){
//过程结果
}
});
});
将生成GET请求,因此它与Route::delete不匹配
HTML表单不支持放置、修补或删除操作。因此,在定义从HTML表单调用的PUT、PATCH或DELETE路由时,需要向表单中添加隐藏的_方法字段
参考:
要调用删除路由,必须使用jquery实现
<a eventid="{{$event->id}}" href="#" type="button" class="btn btn-sm btn-danger"><em class="fa fa-trash"></em></a>
$(document).on("click",".anchorclass",function(e){
e.preventDefault();
if(!confirm("Are you sure?")) return;
$.ajax({
type: "DELETE",
url: 'events/'+$(this).attr("eventid"),
success: function(data) {
//Process results
}
});
});
$(文档).on(单击),.anchorclass,函数(e){
e、 预防默认值();
如果(!确认(“您确定吗?”)返回;
$.ajax({
键入:“删除”,
url:'events/'+$(this.attr(“eventid”),
成功:功能(数据){
//过程结果
}
});
});
除了使用forms facade之外,没有其他方法了吗?我没有用过它,因为肯定是有原因的,Laravel决定不再把它作为核心Laravel系统的一部分。你的建议很有效。我已经更新了原来的帖子,加入了我认为有效的两个解决方案。不过,一个简单的问题是,你的建议(没有表单facade)会导致垃圾(删除)图标被放在单独的一行,而不是其他图标旁边。你知道我如何确保图标在其他图标旁边吗?@wiwa1978如果你有引导CSS,尝试将类表单内联添加到表单标签:
。没有其他方法使用表单外观吗?我没有用过它,因为肯定是有原因的,Laravel决定不再把它作为核心Laravel系统的一部分。你的建议很有效。我已经更新了原来的帖子,加入了我认为有效的两个解决方案。不过,一个简单的问题是,你的建议(没有表单facade)会导致垃圾(删除)图标被放在单独的一行,而不是其他图标旁边。你知道我如何确保图标在其他图标旁边吗?@wiwa1978如果你有引导CSS,尝试将类表单内联添加到表单标签:
。