如何通过Laravel Yajra DataTable向控制器传递id参数
问题原因和修复方案
- 你将DataTable传递参数的
data配置项注释了,这是id无法正常提交的核心原因 - Yajra DataTable GET请求不需要额外传递csrf_token,只有POST请求需要
- 控制器闭包中拼接路由不能直接写PHP标签,需要取当前行
$row的属性 - JS中调用的路由名需要和你定义的路由名称保持一致
修正后的jQuery代码
$(function() { var id = "<?php echo $id;?>"; var table = $('#data-table').DataTable({ processing: true, serverSide: true, searchable:true, ajax: { url: "{{ route('getOperationTimes') }}", type: "GET", data: function (d) { d.id = id; // 把id参数附加到DataTable请求参数中 } }, columns: [{ data: 'DT_RowIndex', name: 'DT_RowIndex' }, { data: 'name', name: 'name' }, { data: 'day', name: 'day' }, { data: 'start_time', name: 'start_time' }, { data: 'end_time', name: 'end_time' }, { data: 'action', name: 'action', orderable: false, searchable: false }, ] }); });
修正后的控制器代码
public function getOperationTimes(Request $request) { if ($request->ajax()) { $station_id = $request->input('id'); $station = new Station(); $getData = $station->getOperationTimes($station_id); return Datatables::of($getData) ->addIndexColumn() ->addColumn('action', function($row){ // 直接取当前行$row的属性拼接路由 $btn = '<a href="/eCharge/public/vendor/getOperationTime/'.$row->id.'" class="edit btn btn-primary">Edit</a> '; return $btn; }) ->rawColumns(['action']) ->make(true); } }
验证方法
可以在控制器方法开头打印dd($request->all()),即可看到请求参数中已经携带了id值,确认参数正常后再注释调试代码执行业务逻辑即可。
内容的提问来源于stack exchange,提问作者mohandxminds
相关产品推荐
相关产品推荐

