【问题标题】:How to pull data for and display an Association as a multiple-select checkbox in CakePHP 3?如何在 CakePHP 3 中提取数据并将关联显示为多选复选框?
【发布时间】:2015-04-06 04:34:18
【问题描述】:

我正在使用单独的表中的角色设置用户访问模型,并通过 UserRoles 表链接到用户。

我目前在 Model/Table/UsersTable.php 中有以下内容:

$this->belongsToMany('Roles', [
    'through' => 'UserRoles'
]);

以及 Model/Table/RolesTable.php 中的以下内容:

$this->belongsToMany('Users', [
    'through' => 'UserRoles'
]);

以及 Model/Table/UserRolesTable.php 中的以下内容:

$this->belongsTo('Users', [
    'foreignKey' => 'user_id'
]);
$this->belongsTo('Roles', [
    'foreignKey' => 'role_id'
]);

我创建了 3 个不同的角色,“查看者”、“创建者”和“管理员”。我已经成功地根据用户类型设置了权限。我遇到困难的地方是通过关联表单向用户添加角色。

现在,我已授予管理员用户编辑用户信息的能力。这适用于我在用户表中的基本信息,但我不知道如何为关联的角色设置表单字段。我希望它是一个复选框,管理员可以在其中为用户选择每个权限。

我目前正在这样做,这并没有给我想要的:

 echo $this->Form->input('Users.role', ['type' => 'checkbox']);

这给了我一个带有“角色”标签的复选框。我想从我的 Roles 表中提取每一行并将它们全部列为选项。

我有几个与此相关的问题:

1) 这似乎很基础,但我只是没有明确说明。我的 UsersController 中需要什么代码来提取所有角色的列表? (不仅仅是与当前用户相关联的对象,还有 Roles 表中的所有对象。)

2) 我需要什么表单输入代码来显示带有所有可能角色的复选框,并将当前用户权限(在我的 UserRoles 表中)显示为已选中?我想我的表单中需要这样的东西:

 echo $this->Form->select('User.Role', $options, ['multiple' => 'checkbox']);

...但我不知道 $options 应该是什么,以及如何设置已选择的值。

我目前正在使用要编辑的用户对象提取角色:

    $user = $this->Users->get($id, [
        'contain' => ['Roles'],
        'Users.id' => $this->Auth->user('id')
    ]);

...但我无法将其转换为复选框表单选择。

非常感谢。

【问题讨论】:

    标签: cakephp cakephp-3.0


    【解决方案1】:

    为了从一些选项中创建一个复选框列表,您首先需要从控制器发送选项:

    $this->set('roles', $this->Users->Roles->find('list'));
    

    然后,在您的模板中添加 multiple => checkbox 输入:

    echo $this->Form->input('roles', ['multiple' => 'checkbox', 'options' => $roles]);
    

    没有必要在您的输入名称前加上User.,只需将您的输入命名为用户实体的属性即可。

    【讨论】:

    • 有没有办法设置是否使用 $this->Form->input 语法检查每个值?例如,如果我有一个要测试 in_array 的 $selectedRoles 数组?
    • 当您执行$user->get($id, ['contain' => ['Roles']]) 并将$user 传递给$this->Form->create($user) 时,它将自动知道先前选择的角色。所以你不需要在那里做任何额外的事情
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    相关资源
    最近更新 更多