Laravel 5 dataTables,带有控制器功能的初始化表 - php

我正在尝试创建一个用户的dataTable,其中每一行都有一个下拉子行,其中包含用户权限的复选框。因此,“超级”管理员可以动态地单击用户并在表中分配其特权。

首先,不确定这是否是一个好主意,请随时提出一个更好的方法。也许每行一个简单的弹出模式会更容易,但是现在我已经决定这是一种很酷的方法,所以我继续进行。

但是,目前尝试用AJAX初始化dataTable令我感到困惑。

PermissionsController.php

public function grid()
{
    //retrieve data from models
    $data['data'] = collect([ 'admins' => $admins, 'roles' => $roles ]);

        return $data;
}

routes.php

Route::get('user-permissions', 'PermissionsController@grid');

Permissions.blade

<table class="table table-striped" id="admins_table" >
    <thead>
    <tr>
        <th>Last Name</th>
        <th>First Name</th>
        <th>Email</th>
        <th>Phone</th>
    </tr>
    </thead>
</table>

js

var oTable = $('#admins_table').dataTable( {
    "sDom": "<'row'<'col-md-6'l><'col-md-6'f>r>t<'row'<'col-md-12'p i>>",
    "aaSorting": [],
    "oLanguage": {
        "sLengthMenu": "_MENU_ ",
        "sInfo": "Showing <b>_START_ to _END_</b> of _TOTAL_ entries"
    },
    "ajax": {
       //here's where I'm trying to grab the data
       "url": "http://example.app/user-permissions", 
       "dataSrc": "data"
    },
    "columns": [
        { "data": "last_name" },
        { "data": "first_name" },
        { "data": "email" },
        { "data": "phone" }
    ]
});

阿贾克斯

{
"data":
    {
    "admins":
    [{
        "id":31,
        "email":"[email protected]",
        "last_login":"2015-07-27 09:50:50",
        "first_name":"Gary",
        "last_name":"Barlow",
        "roles":[{
            "id":1,"slug":"admin"
        }]
    }],

    "roles":
    [
        {"id":3,"slug":"admin","name":"Admin"},
        {"id":7,"slug":"accounts","name":"Accounts"}, 
        {"id":8,"slug":"sales","name":"Sales"},
        {"id":9,"slug":"superAdmin","name":"SuperAdmin"}
    ]
    }
}

“管理员”对象包含所有经过的管理员及其已分配的角色。这些应显示为已在子行中打勾。
“角色”对象将包含所有当前可用角色,以允许分配其他角色。基本上,这标识了需要显示的复选框数量。

由于上面的内容与初始化有关,因此我将其余部分进行了抽象。非常感谢您的帮助。

尝试使用AJAX时,如果我在浏览器中输入路由路径,则得到JSON对象输出,那么除了“表中没有可用数据”外,我什么也没有。

我不确定该如何称呼这条路线。

url: '/user-permissions',
dataSrc: 'data.admins',
success: function (data) {
    console.log(data);
}

以上就足够了吗?我真的不想调用整个URL。我什至添加了一个成功函数来尝试获取数据的控制台输出,但还是一无所获。

php参考方案

正确的dataSrc引用应为data.admins
您错过了示例数据中的admins[].phone吗?

据我了解,您想显示一个填充有<select>data.roles,显示当前的data.admins[].roles[0].id吗?

您可以通过在data.roles回调(或在dataSrc事件中)收集xhr.dt并为角色列使用render方法来做到这一点:

<table class="table table-striped" id="admins_table" >
    <thead>
    <tr>
        <th>Last Name</th>
        <th>First Name</th>
        <th>Email</th>
        <th>Phone</th>
        <th>role</th>
    </tr>
    </thead>
</table>

js,只有重要

var roles,
var oTable = $('#admins_table').dataTable( {
    "ajax": {
        "url": "http://example.app/user-permissions",  
        "dataSrc" : function(json) {
            roles = json.data.roles;
            return json.data.admins;
        }
    },
    "columns": [
        { "data": "last_name" },
        { "data": "first_name" },
        { "data": "email" },
        { "data": "phone" },
        { "data": "roles",
          "render": function(data, type, row) {
            var select = '<select>',
                role = data[0].id;
            for (var i=0;i<roles.length;i++) {
                select+='<option value="'+roles[i].id+'"';
                if (role == roles[i].id) select+=' selected';
                select+='>'+roles[i].name+'</option>';
            }
            select+='</select>';
            return select;
          }
       }
    ]
});

产生此表:
Laravel 5 dataTables,带有控制器功能的初始化表 - php

与此数据:

{ "data": {
    "admins": [{
        "id":31,
        "email":"[email protected]",
        "last_login":"2015-07-27 09:50:50",
        "first_name":"Gary",
        "last_name":"Barlow",
        "phone" : "123",
        "roles":[{
            "id":8,"slug":"sales"
        }]
    },{
        "id":32,
        "email":"[email protected]",
        "last_login":"2015-07-27 09:50:50",
        "first_name":"Bary",
        "last_name":"Garlow",
        "phone" : "321",
        "roles":[{
            "id":7,"slug":"accounts"
        }]
    }],
    "roles": [
        {"id":3,"slug":"admin","name":"Admin"},
        {"id":7,"slug":"accounts","name":"Accounts"}, 
        {"id":8,"slug":"sales","name":"Sales"},
        {"id":9,"slug":"superAdmin","name":"SuperAdmin"}
    ]
  }
}

Laravel 5中带有文件的Ajax表单提交 - php

我正在尝试在laravel 5中实现fileupload。但是首先要发送数据,例如简单的字符串。我的表格: {!!Form::open(["url"=>"/photos", "method" => "post", "files"=>true,…

将输入类型复选框关联到输入类型文本 - php

我有一个问题,我需要将输入类型复选框与输入类型文本关联。情况如下:从数据库中提取数据。 PK数据是复选框的值。当复选框选择输入类型的文本时,您可以在其中输入特定数字。现在的问题是,选中所有类型的复选框输入文本都会被激活。我希望通过选择复选框输入,仅启用与复选框相关联的输入。我的HTML代码(此代码创建一个输入复选框,并为数据库中的每个记录输入文本,而我要激活…

AJAX调用只能与$(document).on('click')一起使用 - php

我有一个显示数据库条目的表。用户能够为每一行打开一个弹出菜单。选项之一是删除数据库条目,并且该表应通过AJAX调用相应地刷新。只要有人单击#delete-toggle中的table-popup,我就会在HTML页面上进行AJAX调用(table-popup是div,当有人单击每行中存在的表中的table-edit-button时出现的表): <div …

当文本等于单选按钮的值时,选择单选按钮 - php

当下拉菜单中的文本等于值时,是否可以选择2个名称相同但值不同的单选按钮中的1个?https://paste.ee/p/2iCjA第97行我用if-else尝试过:if($('input[name="anrede"]').val() == 'Herr') { $("#Herr").…

为什么我的注册表单可以在除Firefox之外的所有浏览器中使用? - php

在这里可用:http://syllableapp.com/test基本上,在Safari,Chrome,Opera,Webkit Nightly等中,表单可以完美地按预期工作。但是,在Firefox中,提交时只是...不执行任何操作。为什么是这样?这是我的JavaScript:$(document).ready(function() { $('in…