您无法在应用程序中的任何地方将同名与不同的目标“ className”选项关联起来

时间:2018-08-22 16:36:27

标签: php cakephp permissions cakephp-3.0

我正在使用 slince / cakephp-permission 程序包向我的CakePHP应用程序添加权限和角色。

我设法进行设置,但是当我尝试授予角色权限时,我看到此错误:

Slince\CakePermission\Model\Table\RolesTable association "Permissions" of type "manyToMany" to "App\Model\Table\PermissionsTable" doesn't match the expected class "Slince\CakePermission\Model\Table\PermissionsTable". You can't have an association of the same name with a different target "className" option anywhere in your app.

引发此错误的代码是下面的代码

$roleObj = Role::find($role->name);
$roleObj->givePermission($addPermission);

如果我var_dump $ roleObj,这是我获得的结果

object(Slince\CakePermission\Model\Entity\Role)#239 (13) {
  ["id"]=>
  int(6)
  ["name"]=>
  string(5) "Admin"
  ["slug"]=>
  string(5) "Admin"
  ["created"]=>
  object(Cake\I18n\Time)#258 (3) {
    ["time"]=>
    string(25) "2018-08-22T11:41:28+00:00"
    ["timezone"]=>
    string(3) "UTC"
    ["fixedNowTime"]=>
    bool(false)
  }
  ["modified"]=>
  string(15) "22/08/18, 11:41"
  ["[new]"]=>
  bool(false)
  ["[accessible]"]=>
  array(2) {
    ["id"]=>
    bool(false)
    ["*"]=>
    bool(true)
  }
  ["[dirty]"]=>
  array(0) {
  }
  ["[original]"]=>
  array(0) {
  }
  ["[virtual]"]=>
  array(0) {
  }
  ["[errors]"]=>
  array(0) {
  }
  ["[invalid]"]=>
  array(0) {
  }
  ["[repository]"]=>
  string(16) "_PermissionRoles"
}

这些是表格页面中的关系

$this->belongsToMany('Permissions', [
            'targetTable' => 'Slince\CakePermission\Model\Table\Permissions',
            'className' => 'Slince\CakePermission\Model\Table\Permissions',
            'foreignKey' => 'role_id',
            'targetForeignKey' => 'permission_id',
            'joinTable' => 'roles_permissions',
            'saveStrategy' => 'append'
 ]);
$this->belongsToMany('Roles', [
            'targetTable' => 'Slince\CakePermission\Model\Table\Roles',
            'className' => 'Slince\CakePermission\Model\Table\Roles',
            'foreignKey' => 'permission_id',
            'targetForeignKey' => 'role_id',
            'joinTable' => 'roles_permissions',
            'saveStrategy' => 'append'
]);

我尝试了几种不同的设置,但总是收到相同的错误。 我想在设置表格之间的关系时会丢失一些东西。

你们知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

当您在应用中定义了两个(或多个)名称为“权限”的关联,并且每个关联引用不同的模型类时,就会发生这种情况。

您应检查是否:

  1. 存在任何名为“ Permissions”的用户定义关联。如果是这样,请重命名。
  2. 其他任何插件都使用“权限”关联(可能是旧版权限管理器)-然后必须将其删除或覆盖。