Laravel Route资源破坏无法正常工作

时间:2016-10-07 11:50:03

标签: php laravel

这是我的表格:

<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.']);
}

但它无法删除问题在哪里?怎么解决这个?

5 个答案:

答案 0 :(得分:7)

您需要对表单使用POST方法,并添加名称为input的{​​{1}}元素和值_method。另外,添加令牌:

DELETE

答案 1 :(得分:1)

我认为您必须在表单中添加一个隐藏的输入,其中包含使用的方法:

<form action="{{ route('invoice.destroy' , $invoice->id)}}" method="POST">
    <input type="hidden" name="_method" value="DELETE" />
</form>

阅读有关Form method spoofing

的Laravel文档的更多信息

答案 2 :(得分:0)

要使PUTDELETE方法有效,您需要一个额外的字段,因为在HTML中只能使用POSTGET(不属于开箱)。

附加字段将使用代码:

{!! 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>

答案 3 :(得分:0)

此外,如果您正在使用刀片模板,则可以添加method字段,如下所示: @method('DELETE')

答案 4 :(得分:0)

更多Laravel方法,您可以做到

<form action="{{ route('invoice.destroy',$invoice->id)}}" method="POST">
    @method('DELETE')
    <button type="submit" class="btn btn-primary">Yes</button>
</form>