我正在尝试保存用户,但是当我保存时,我收到以下错误
AclNode :: node() - 无法找到由" Array标识的Aro节点( [Aro0.model] =>角色[Aro0.foreign_key] => )"
我也在顶部
中收到此错误未定义的索引:role_id [CORE \ Cake \ Model \ AclNode.php,第140行]
我不知道该怎么做,因为当我添加角色时,它很容易将它们添加到aros中,为什么它现在给我带来问题
我按照
提供的指南这应该很简单,但似乎并不那么简单。
在角色模型
中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.'));
}
}
}
答案 0 :(得分:1)
我同意吉米,你应该把关系改为$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 $actsAs = array('Acl' => array('type' => 'requester'));
应仅在Role模型上,请参阅我添加的关系,并查看parentNode和bindNode函数更改。
尝试此操作,如果有任何问题请与我联系。
希望有所帮助
答案 1 :(得分:0)
根据您的parentNode()
方法,我假设您应该将用户模型中的关系更改为:
public $belongsTo = array('Role');
还要确保$ this-> request-> data ['User']在调用$ this-> User-> save($ this-> request-> data)时正确包含role_id字段)在添加动作中。
稍作修改:在$this->User->Create();
中使用小写“c”:
$this->User->create();