Laravel 路由资源销毁不起作用
Laravel Route resource destroy not working
这是我的表格:
<form action="{{ route('invoice.destroy' , $invoice->id)}}" method="DELETE">
<div class="modal-footer no-border">
<button type="button" class="btn btn-info" data-dismiss="modal">No</button>
<button type="submit" class="btn btn-primary">Yes</button>
<input type="hidden" name="_method" value="DELETE" />
</div>
</form>
这是我的控制器:
public function destroy($id)
{
$invoice = Invoice::find($id);
if(!$invoice){
return redirect()->route('invoice.index')->with(['fail' => 'Page not found !']);
}
$invoice->delete();
return redirect()->route('invoice.index')->with(['success' => 'Invoice Deleted.']);
}
但是不能删除问题出在哪里?如何解决这个问题?
我认为您必须向表单添加隐藏输入,其中将包含所使用的方法:
<form action="{{ route('invoice.destroy' , $invoice->id)}}" method="POST">
<input type="hidden" name="_method" value="DELETE" />
</form>
阅读有关 Form method spoofing
的 Laravel 文档的更多信息
您需要对表单使用 POST
方法并添加名称为 _method
值 DELETE
的 input
元素。另外,添加令牌:
<form action="{{ route('invoice.destroy' , $invoice->id)}}" method="POST">
<input name="_method" type="hidden" value="DELETE">
{{ csrf_field() }}
<div class="modal-footer no-border">
<button type="button" class="btn btn-info" data-dismiss="modal">No</button>
<button type="submit" class="btn btn-primary">Yes</button>
</div>
</form>
为了使 PUT
和 DELETE
方法起作用,您需要一个额外的字段,因为在 [=22= 中只有 POST
和 GET
是可能的] (盒子外面)。
附加字段将使用代码创建:
{!! method_field('DELETE') !!}
因此您的表单将如下所示:
<form action="{{ route('invoice.destroy' , $invoice->id)}}" method="DELETE">
{!! method_field('DELETE') !!}
<div class="modal-footer no-border">
<button type="button" class="btn btn-info" data-dismiss="modal">No</button>
<button type="submit" class="btn btn-primary">Yes</button>
</div>
</form>
此外,如果您使用的是 blade 模板,您可以像这样添加方法字段:
@method('DELETE')
更多 Laravel 方法可以做到这一点
<form action="{{ route('invoice.destroy',$invoice->id)}}" method="POST">
@method('DELETE')
<button type="submit" class="btn btn-primary">Yes</button>
</form>
这是我的表格:
<form action="{{ route('invoice.destroy' , $invoice->id)}}" method="DELETE">
<div class="modal-footer no-border">
<button type="button" class="btn btn-info" data-dismiss="modal">No</button>
<button type="submit" class="btn btn-primary">Yes</button>
<input type="hidden" name="_method" value="DELETE" />
</div>
</form>
这是我的控制器:
public function destroy($id)
{
$invoice = Invoice::find($id);
if(!$invoice){
return redirect()->route('invoice.index')->with(['fail' => 'Page not found !']);
}
$invoice->delete();
return redirect()->route('invoice.index')->with(['success' => 'Invoice Deleted.']);
}
但是不能删除问题出在哪里?如何解决这个问题?
我认为您必须向表单添加隐藏输入,其中将包含所使用的方法:
<form action="{{ route('invoice.destroy' , $invoice->id)}}" method="POST">
<input type="hidden" name="_method" value="DELETE" />
</form>
阅读有关 Form method spoofing
的 Laravel 文档的更多信息您需要对表单使用 POST
方法并添加名称为 _method
值 DELETE
的 input
元素。另外,添加令牌:
<form action="{{ route('invoice.destroy' , $invoice->id)}}" method="POST">
<input name="_method" type="hidden" value="DELETE">
{{ csrf_field() }}
<div class="modal-footer no-border">
<button type="button" class="btn btn-info" data-dismiss="modal">No</button>
<button type="submit" class="btn btn-primary">Yes</button>
</div>
</form>
为了使 PUT
和 DELETE
方法起作用,您需要一个额外的字段,因为在 [=22= 中只有 POST
和 GET
是可能的] (盒子外面)。
附加字段将使用代码创建:
{!! method_field('DELETE') !!}
因此您的表单将如下所示:
<form action="{{ route('invoice.destroy' , $invoice->id)}}" method="DELETE">
{!! method_field('DELETE') !!}
<div class="modal-footer no-border">
<button type="button" class="btn btn-info" data-dismiss="modal">No</button>
<button type="submit" class="btn btn-primary">Yes</button>
</div>
</form>
此外,如果您使用的是 blade 模板,您可以像这样添加方法字段: @method('DELETE')
更多 Laravel 方法可以做到这一点
<form action="{{ route('invoice.destroy',$invoice->id)}}" method="POST">
@method('DELETE')
<button type="submit" class="btn btn-primary">Yes</button>
</form>