首页 > 解决方案 > Laravel:无法将正确的参数传递给 DataTable 按钮中的路由

问题描述

我使用的是普通的桌子和我所有的按钮都可以正常工作。然后我遇到了数据表,所以我实现了数据表来列出我的员工模型中的所有员工。所以我使用 JQuery 将数据提供给我的表。下面是代码:

   $(document).ready( function () {
        $('.table').DataTable({
            processing: true,
            serverSide: true,
            ajax : '{!! route('employees.search') !!}',
            columns: [
                { data: 'name', name: 'name'},
                { data: 'empid', name: 'empid'},
                { data: 'user_type', name: 'user_type'},
                { data: 'depots', name: 'depots'},
                { data: 'id',   name: 'id',
                  render: function ( data , row ) {
                    return '<div style="margin-left:1%;">
                            <button class="btn btn-round btn-primary btn-sm" 
                             onclick="showMessage('+data+')">Delete</button> 
                             <form id="'+data+'" method="POST" action=" {{ 
                              route("employees.destroy","'+data+'") }} "> 
                              <input type="hidden" name="_method" 
                               value="delete"> {{ csrf_field() }} </form> </div>';
                    }
                },
            ],
        });
    });

所以在上面的代码中,我渲染了一个按钮来执行删除功能。不知何故,当我将参数传递给我的路线 {{route("employees.destroy","'+data+'") }}它作为数据返回,而我期望它是行的 id。以下是我的删除功能代码:

public function destroy($id)
    {
        return $id;
        if ( Auth::check() ) {
            $findResult = AppUser::where('id','=',$id)->first();
            $user = User::where('email',$findResult->email)->first();
            if ($findResult->delete())
            { 
                if ($user) {
                    $user->delete();
                }
                return redirect()->route('employees.index','all')->with('success' , 'Employee deleted successfully!');
            }
            return back()->withInput()->with('error' , 'Employee could not be deleted');
        }        
    }

所以我得到的回应是错误的。有人可以告诉我将参数发送到路线的替代方案或解决方案吗?我期望该值是行的 id 但我得到的响应只是'+data+'

标签: jquerylaravellaravel-5datatableslaravel-blade

解决方案


我建议如下:

  1. addColumn()使用方法返回 URL 作为数据的一部分。例如:

    // ... skipped ...
    ->addColumn('delete_url', function ($model) {
        return route('backend.model.delete', $model);
    });
    
  2. 给“删除”按钮一个特殊的类,例如“btn-delete”。

  3. 使用特殊类“btn-delete”将事件处理程序附加到“删除”按钮。单击按钮时,使用来自delete_url数据属性的 URL 发出 Ajax 请求。


推荐阅读