Laravel中如何通过DataTables传递URL参数至控制器?
解决方案:修复DataTables变量传递与渲染错误
看起来你遇到的是DataTables渲染错误(对应tn/1提示),结合你的代码分析,核心问题出在action列的URL参数错误和DataTables API使用不当,同时可以优化变量传递的可靠性。下面是具体的修复步骤:
1. 优化视图中AJAX URL的变量传递
原视图中依赖request()->route('id')传递车辆ID,虽然能工作,但直接使用控制器已传递到视图的$vehicle对象更直观可靠,避免路由参数获取异常:
var vehicleexpensetable = $('#vehicleexpensetable').DataTable({ processing: true, serverSide: true, // 改用$vehicle->id直接传递车辆ID ajax: "{{ action('\Modules\Essentials\Http\Controllers\VehicleExpenseController@index', $vehicle->id) }}", columnDefs: [ { targets: 2, orderable: false, searchable: false, }, ] });
2. 修正DataTables action列的URL参数
你在addColumn('action')中错误地使用了车辆的$id作为费用记录的ID传递给编辑/删除方法,这会导致URL指向错误的资源,触发DataTables渲染错误。需要改为使用费用记录自身的ID(即$row->id):
->addColumn( 'action', '@can("vehicle.update") <button data-href="{{ action(\'\Modules\Essentials\Http\Controllers\VehicleExpenseController@edit\', [$row->id]) }}" class="btn btn-xs btn-primary btn-modal" data-container=".view_modal"> <i class="glyphicon glyphicon-edit"></i> @lang("messages.edit") </button> @endcan @can("vehicle.delete") <button data-href="{{ action(\'\Modules\Essentials\Http\Controllers\VehicleExpenseController@destroy\', [$row->id]) }}" class="btn btn-xs btn-danger delete_vehicleexpensebutton"> <i class="glyphicon glyphicon-trash"></i> @lang("messages.delete") </button> @endcan' )
3. 修复removeColumn的语法错误
原代码中->removeColumn('id','BusinessID')不符合DataTables的API规范(removeColumn一次只能接收一个列名),需要改为复数形式的removeColumns并传递数组,或者分开调用:
// 推荐方式:用removeColumns传递数组 ->removeColumns(['id', 'BusinessID']) // 替代方式:分开调用removeColumn // ->removeColumn('id') // ->removeColumn('BusinessID')
额外优化(可选)
如果需要在视图中直接使用车辆ID,可以在控制器返回视图时显式传递:
// 在控制器index方法的return view处 return view('essentials::vehicleexpense.index')->with(compact('expensetypes','vehicle', 'id'));
完成以上修改后,DataTables应该能正常渲染,同时车辆ID会正确传递到控制器,筛选出对应车辆的费用记录。
内容的提问来源于stack exchange,提问作者Dem
相关产品推荐
相关产品推荐

