Laravel Yajra Datatables如何渲染blade模板添加自定义操作列
问题原因
你遇到的这个问题是Yajra Datatables 9.x及以上版本调整了addColumn方法的用法导致的,旧版本支持直接传入视图路径字符串自动渲染,新版本必须手动调用视图渲染方法生成HTML字符串。
解决步骤
- 修改Controller中
addColumn的写法,使用闭包手动渲染blade模板,代码如下:
public function index() { if(request()->ajax()) { return datatables()->of(Company::select('*')) ->addColumn('action', function ($company) { // 传入当前行的company数据到blade模板,调用render()方法转为HTML字符串 return view('company-action', compact('company'))->render(); }) ->rawColumns(['action']) ->addIndexColumn() ->make(true); } return view('company.company-index'); }
- 调整
company-action.blade.php的变量引用,对应传入的参数:
如果你在闭包中传的是完整的company实例,把模板里的{{ $id }}改成{{ $company->id }}即可:
<a href="javascript:void(0)" data-toggle="tooltip" onClick="editFunc({{ $company->id }})" data-original-title="Edit" class="edit btn btn-success edit"> Edit </a> <a href="javascript:void(0);" id="delete-compnay" onClick="deleteFunc({{ $company->id }})" data-toggle="tooltip" data-original-title="Delete" class="delete btn btn-danger"> Delete </a>
如果不想修改模板,也可以直接在闭包中传入id参数:
->addColumn('action', function ($company) { return view('company-action', ['id' => $company->id])->render(); })
注意事项
- 确保blade模板的路径正确:如果
company-action.blade.php放在resources/views的子目录下,比如resources/views/companies/company-action.blade.php,则视图路径要写为companies.company-action - 已经配置的
rawColumns(['action'])必须保留,否则模板输出的HTML代码会被自动转义为纯文本
内容的提问来源于stack exchange,提问作者ethan17
相关产品推荐
相关产品推荐

