CakePHP 3 - 更改密码
CakePHP 3 - Change Password
我现在开始学习cakephp 3,他是测试版所以你的手册还没有完成..
我需要更改用户密码,但它触发了 Flash 错误。调试变量 $user 只显示 "The Field Required" 但所有 table 的字段都是值 NULL。
我的代码:
//Create a new Entity
$user = $this->Users->newEntity();
// Set new password and user's id... I'm not doing with session yet, ok?
$user = $this->Users->patchEntity($user, ['password' => $this->request->data['new-password'], 'id' => 2]);
debug($user->errors());
if ($this->Users->save($user)) {
$this->Flash->success('Its Right');
} else {
$this->Flash->error('FAIL');
}
Debuggin $user 它们是用户table.
的字段
[
'gym_id' => [
(int) 0 => 'This field is required'
],
'role_id' => [
(int) 0 => 'This field is required'
],
'name' => [
(int) 0 => 'This field is required'
],
'username' => [
(int) 0 => 'This field is required'
],
'stats' => [
(int) 0 => 'This field is required'
]
]
我的用户模型
public function validationDefault(Validator $validator)
{
$validator
->add('id', 'valid', ['rule' => 'numeric'])
->allowEmpty('id', 'create')
->add('gym_id', 'valid', ['rule' => 'numeric'])
->requirePresence('gym_id', 'create')
->notEmpty('gym_id')
->add('role_id', 'valid', ['rule' => 'numeric'])
->requirePresence('role_id', 'create')
->notEmpty('role_id')
->requirePresence('name', 'create')
->notEmpty('name')
->requirePresence('username', 'create')
->notEmpty('username')
->requirePresence('password', 'create')
->notEmpty('password')
->add('stats', 'valid', ['rule' => 'numeric'])
->requirePresence('stats', 'create')
->notEmpty('stats');
return $validator;
}
已解决
根据文档创建了 patchEntity 供您使用现有实体,创建一个新实体我将在数据库中创建一行,那么解决方案是:
只需更新 UsersController,使用具有您要更新的用户 ID 的实体
用户控制器
$user_data = $this->Users
->find()
->where(['id' => 2])
->first();
$user = $this->Users->patchEntity($user_data,
[
'password' => $this->request->data['new-password']
]);
/*debug($user);
exit();*/
if ($this->Users->save($user)) {
$this->Flash->success('Success, GG EASY');
} else {
$this->Flash->error('FAIL, SurrenderAt20');
}
谢谢大家^^
您需要这些字段存在,所以这是预期的行为。根据您的意见,将 requirePresence()
的第二个参数设置为 "false"
不会执行任何操作,因为这是一个字符串,如果您想禁用此检查,则必须提供一个布尔值,即 false
不带引号。但是,这只会弄乱您的默认验证。
也就是说,有多种方法可以解决 "problem" 字段并不总是必需的问题,一种方法是使用一组单独的验证规则,例如:
public function validationUpdatePassword(Validator $validator)
{
$validator
->add('id', 'valid', ['rule' => 'numeric'])
->requirePresence('id')
// you might want to add some actual password validation here
->requirePresence('password')
->notEmpty('password');
return $validator;
}
$user = $this->Users->patchEntity($user, [
'password' => $this->request->data['new-password'],
'id' => 2
], [
'validate' => 'updatePassword'
]);
另见
我现在开始学习cakephp 3,他是测试版所以你的手册还没有完成..
我需要更改用户密码,但它触发了 Flash 错误。调试变量 $user 只显示 "The Field Required" 但所有 table 的字段都是值 NULL。
我的代码:
//Create a new Entity
$user = $this->Users->newEntity();
// Set new password and user's id... I'm not doing with session yet, ok?
$user = $this->Users->patchEntity($user, ['password' => $this->request->data['new-password'], 'id' => 2]);
debug($user->errors());
if ($this->Users->save($user)) {
$this->Flash->success('Its Right');
} else {
$this->Flash->error('FAIL');
}
Debuggin $user 它们是用户table.
的字段[
'gym_id' => [
(int) 0 => 'This field is required'
],
'role_id' => [
(int) 0 => 'This field is required'
],
'name' => [
(int) 0 => 'This field is required'
],
'username' => [
(int) 0 => 'This field is required'
],
'stats' => [
(int) 0 => 'This field is required'
]
]
我的用户模型
public function validationDefault(Validator $validator)
{
$validator
->add('id', 'valid', ['rule' => 'numeric'])
->allowEmpty('id', 'create')
->add('gym_id', 'valid', ['rule' => 'numeric'])
->requirePresence('gym_id', 'create')
->notEmpty('gym_id')
->add('role_id', 'valid', ['rule' => 'numeric'])
->requirePresence('role_id', 'create')
->notEmpty('role_id')
->requirePresence('name', 'create')
->notEmpty('name')
->requirePresence('username', 'create')
->notEmpty('username')
->requirePresence('password', 'create')
->notEmpty('password')
->add('stats', 'valid', ['rule' => 'numeric'])
->requirePresence('stats', 'create')
->notEmpty('stats');
return $validator;
}
已解决
根据文档创建了 patchEntity 供您使用现有实体,创建一个新实体我将在数据库中创建一行,那么解决方案是:
只需更新 UsersController,使用具有您要更新的用户 ID 的实体
用户控制器
$user_data = $this->Users
->find()
->where(['id' => 2])
->first();
$user = $this->Users->patchEntity($user_data,
[
'password' => $this->request->data['new-password']
]);
/*debug($user);
exit();*/
if ($this->Users->save($user)) {
$this->Flash->success('Success, GG EASY');
} else {
$this->Flash->error('FAIL, SurrenderAt20');
}
谢谢大家^^
您需要这些字段存在,所以这是预期的行为。根据您的意见,将 requirePresence()
的第二个参数设置为 "false"
不会执行任何操作,因为这是一个字符串,如果您想禁用此检查,则必须提供一个布尔值,即 false
不带引号。但是,这只会弄乱您的默认验证。
也就是说,有多种方法可以解决 "problem" 字段并不总是必需的问题,一种方法是使用一组单独的验证规则,例如:
public function validationUpdatePassword(Validator $validator)
{
$validator
->add('id', 'valid', ['rule' => 'numeric'])
->requirePresence('id')
// you might want to add some actual password validation here
->requirePresence('password')
->notEmpty('password');
return $validator;
}
$user = $this->Users->patchEntity($user, [
'password' => $this->request->data['new-password'],
'id' => 2
], [
'validate' => 'updatePassword'
]);
另见