【发布时间】:2015-02-03 15:46:09
【问题描述】:
我现在开始学习 cakephp 3,他是 beta 版本,所以你的手册还没有完成..
我需要更改用户密码,但它触发了 Flash 错误。调试变量 $user 只显示“必填字段”,但所有表的字段都是 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是user表的字段。
[
'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');
}
谢谢大家^^
【问题讨论】:
-
尝试调试
$this->request->data,看看是否从这些必填字段返回任何值。 -
没错,所有值都返回 ['current-password' => 'çlk', 'new-password' => '1234','confirm-password' => '1234']
-
我的表单是三个字段,当前密码、新密码和确认,我正在使用 if 子句及其工作进行验证,我只是想要“编辑”密码字段
-
好的。您的 UserModel 怎么样?您能否使用此信息编辑您的问题?在 CakePHP 2.5 上遇到了与您相同的问题。您的模型是否声明了
public $validate? -
好的,我会编辑,请稍等:)
标签: php validation cakephp cakephp-3.0