Laravel Yajra DataTables无法渲染HTML:@method("DELETE")失效求助
解决Laravel Datatables中@method("DELETE")无法解析的问题
Laravel的@method是Blade模板指令,仅在Blade视图文件中会被编译解析为对应HTML代码。你在Datatables的addColumn方法中直接返回包含@method("DELETE")的字符串时,这段内容不会经过Blade编译,会被当作纯文本输出,无法生成DELETE请求所需的隐藏字段。
以下是三种可行的解决方案:
方案1:直接写入原生HTML隐藏字段
@method("DELETE")本质是生成<input type="hidden" name="_method" value="DELETE">,直接在返回的HTML字符串中添加该原生input即可:
addColumn('action', function($farm) { return '<a id="updateBtn" href="/admin/farms/'.$farm->id.'/edit"><i class="bi bi-pencil-fill"></i></a> <form action="/admin/farms/'.$farm->id.'/delete" method="POST"> <input type="hidden" name="_method" value="DELETE"> <button id="deleteBtn" type="submit"><i class="bi bi-trash-fill"></i></button> </form>'; })
方案2:使用Laravel的method_field辅助函数
调用Laravel内置的method_field函数生成对应隐藏字段,直接拼接到返回内容中:
addColumn('action', function($farm) { return '<a id="updateBtn" href="/admin/farms/'.$farm->id.'/edit"><i class="bi bi-pencil-fill"></i></a> <form action="/admin/farms/'.$farm->id.'/delete" method="POST"> '.method_field('DELETE').' <button id="deleteBtn" type="submit"><i class="bi bi-trash-fill"></i></button> </form>'; })
方案3:通过Blade视图渲染操作列
将操作列内容单独放到Blade视图文件中,比如resources/views/datatables/actions/farm.blade.php:
<a id="updateBtn" href="/admin/farms/{{ $farm->id }}/edit"><i class="bi bi-pencil-fill"></i></a> <form action="/admin/farms/{{ $farm->id }}/delete" method="POST"> @method("DELETE") <button id="deleteBtn" type="submit"><i class="bi bi-trash-fill"></i></button> </form>
然后在Datatables的addColumn中渲染该视图:
addColumn('action', function($farm) { return view('datatables.actions.farm', compact('farm'))->render(); })
内容的提问来源于stack exchange,提问作者alizoubair
相关产品推荐
相关产品推荐

