Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cakephp 创建用户时发生Acl错误(ARO)_Cakephp_Acl_Cakephp 2.4 - Fatal编程技术网

Cakephp 创建用户时发生Acl错误(ARO)

Cakephp 创建用户时发生Acl错误(ARO),cakephp,acl,cakephp-2.4,Cakephp,Acl,Cakephp 2.4,我正在尝试保存用户,但在保存时出现以下错误 AclNode::node()-找不到由“数组”标识的Aro节点( [Aro0.model]=>角色[Aro0.foreign\u key]=>)” 我在顶部也发现了这个错误 未定义索引:role\u id[CORE\Cake\Model\AclNode.php,第140行] 我不知道该怎么做,因为当我添加角色时,它可以轻松地将角色添加到ARO中,所以为什么现在它会给我带来问题 我遵循了 这应该很简单,但似乎不是那么简单 在角色中模型 public

我正在尝试保存用户,但在保存时出现以下错误

AclNode::node()-找不到由“数组”标识的Aro节点( [Aro0.model]=>角色[Aro0.foreign\u key]=>)”

我在顶部也发现了这个错误

未定义索引:role\u id[CORE\Cake\Model\AclNode.php,第140行]

我不知道该怎么做,因为当我添加角色时,它可以轻松地将角色添加到ARO中,所以为什么现在它会给我带来问题

我遵循了

这应该很简单,但似乎不是那么简单

角色中模型

public $primaryKey = 'role_id';
public $displayField = 'role';
public $actsAs = array('Acl' => array('type' => 'requester'));

public function parentNode() {
   return null;
}
public $primaryKey = 'user_id';
public $displayField = 'username';

public function beforeSave($options = array()) {
        $this->data['User']['password'] = AuthComponent::password(
          $this->data['User']['password']
        );
        return true;
    }

    public $hasMany = array(
        'Role'   => array(
        'className' => 'Role',         
        'foreignKey' => 'role_id'
            )
        );

public $actsAs = array('Acl' => array('type' => 'requester'));

    public function parentNode() {
        if (!$this->id && empty($this->data)) {
            return null;
        }
        if (isset($this->data['User']['role_id'])) {
            $roleId = $this->data['User']['role_id'];
        } else {
            $roleId = $this->field('role_id');
        }
        if (!$roleId) {
            return null;
        } else {
            return array('Role' => array('id' => $roleId));
        }
    }
用户模型中

public $primaryKey = 'role_id';
public $displayField = 'role';
public $actsAs = array('Acl' => array('type' => 'requester'));

public function parentNode() {
   return null;
}
public $primaryKey = 'user_id';
public $displayField = 'username';

public function beforeSave($options = array()) {
        $this->data['User']['password'] = AuthComponent::password(
          $this->data['User']['password']
        );
        return true;
    }

    public $hasMany = array(
        'Role'   => array(
        'className' => 'Role',         
        'foreignKey' => 'role_id'
            )
        );

public $actsAs = array('Acl' => array('type' => 'requester'));

    public function parentNode() {
        if (!$this->id && empty($this->data)) {
            return null;
        }
        if (isset($this->data['User']['role_id'])) {
            $roleId = $this->data['User']['role_id'];
        } else {
            $roleId = $this->field('role_id');
        }
        if (!$roleId) {
            return null;
        } else {
            return array('Role' => array('id' => $roleId));
        }
    }
用户的我的保存代码

public function add() {                  
//Populate roles dropdownlist        
        $data = $this->User->Role->find('list', array('fields' => array('role_id', 'role')));
        $this->set('roles', $data);

        if ($this->request->is('post')) {
            $this->User->ContactDetail->create(); 
            $this->User->ContactDetail->save($this->request->data);
            $this->request->data['User']['contact_detail_id'] = $this->User->ContactDetail->id;
            $this->User->Create();
            if ($this->User->save($this->request->data)) {
                $this->Session->setFlash(__('The user has been saved.'));
                return $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('The user could not be saved. Please, try again.'));
            }
        }
    }

根据您的
parentNode()
方法,我假设您应该将用户模型中的关系更改为:

public $belongsTo = array('Role');
在添加操作中调用$this->User->save($this->request->data)[User']时,还要确保$this->request->data['User']包含正确的角色id字段

还有一个小改动:在
$this->User->Create()中使用小写字母“c”

$this->User->create();

我同意Jimmy的观点,您应该将关系更改为
$belongsTo
。当您保存用户时,它也会尝试保存aros表。因此,如果您不想将用户保存在aros中,则需要修改一些更改,只有角色才足以保存aros表(教程中也对此进行了解释),因此请参见我在这两个模型中所做的更改

榜样应该是:

...
    public $hasMany = array(
        'User' => array(
            'className' => 'User',
            'foreignKey' => 'role_id',

        )
    );

    public $actsAs = array('Acl' => array('type' => 'requester'));

    public function parentNode() {
        return null;
    }
    ...
...

    public $belongsTo = array(
        'Role' => array(
            'className' => 'Role',
            'foreignKey' => 'role_id',
        )
    );


    public function bindNode($user) {
        return array('model' => 'Role', 'foreign_key' => $user['User']['role_id']);
    }
...
用户模型应为:

...
    public $hasMany = array(
        'User' => array(
            'className' => 'User',
            'foreignKey' => 'role_id',

        )
    );

    public $actsAs = array('Acl' => array('type' => 'requester'));

    public function parentNode() {
        return null;
    }
    ...
...

    public $belongsTo = array(
        'Role' => array(
            'className' => 'Role',
            'foreignKey' => 'role_id',
        )
    );


    public function bindNode($user) {
        return array('model' => 'Role', 'foreign_key' => $user['User']['role_id']);
    }
...
如上面代码所示,
public$actsAs=array('Acl'=>array('type'=>'requester')
应该仅在角色模型上,请参见我添加的关系,以及parentNode和bindNode函数的更改

试试这个,如果有什么问题请联系我


希望有帮助

我认为在保存用户时,该行为会尝试将用户角色保存为用户ARO的父ARO,但角色id没有正确传递。parentNode()是否正确返回角色ID?保存用户时,是否可以调试parentNode()方法返回的内容?用户模型中定义的关系应为用户所属角色。如果您使用该代码并将“组”替换为“角色”,您所指的指南将起作用。用户本身是使用所有数据正确创建的。问题是自动创建ARO。将再次检查,以防它仍然保存。我以前将角色作为belongsto,但没有多大区别,但会将其更改回。我一回到家就尝试此操作,希望它能解决我的问题。我想让用户保存到aros,但不明白为什么它不起作用。你提供的东西我以前做过。这只会将角色保存到ARO。但尽管这对我来说可能已经足够了。我只是想知道为什么另一种方法不起作用。我已经接受了你的回答,尽管我有一个问题,如果你能如此慷慨地帮助我,用户可以编辑。如果你接受我的回答,请投票支持我的回答。我会尽快回答你的其他问题。谢谢