在我的路线文件中,我有
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>
这不起作用。当我将路线改为
时 Route::get('events/{events}', ['as' => 'events_delete', 'uses' => 'Admin\EventsController@destroy'] );
确实有效。但是我不喜欢使用GET动词来删除项而不是DELETE动词。感觉就像一招......
如何更改表单代码以确保它发送DELETE谓词?
解决方案1(来自TheFallen):在路线文件中使用DELETE VERB
<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>
解决方案2:在路线文件中使用GET VERB
<a href="{!! route('events_delete', ['id' => $event->id ]) !!}" type="button" class="btn btn-sm btn-danger"><em class="fa fa-trash"></em></a>
答案 0 :(得分:2)
您必须以这种方式发出删除请求才能使用该路由,您可以使用表单执行此操作,否则使用锚点您正在进行 get 请求
如果您还没有laravelcollective/html包,请从composer安装它以使用表单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>
答案 1 :(得分:1)
这将产生一个GET请求,因此它不匹配Route :: delete
HTML表单不支持PUT,PATCH或DELETE操作。因此,在定义从HTML表单调用的PUT,PATCH或DELETE路由时,您需要向表单添加隐藏的_method字段。
参考:https://laravel.com/docs/master/routing#form-method-spoofing
要调用删除路由,必须使用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
}
});
});