【问题标题】:CakePHP 3 - Change PasswordCakePHP 3 - 更改密码
【发布时间】: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


【解决方案1】:

您需要这些字段存在,因此这是预期的行为。根据您的 cmets,将 requirePresence() 的第二个参数设置为 "false" 不会做任何事情,因为这是一个字符串,如果您想禁用此检查,您必须提供一个布尔值,即 @987654326 @ 不带引号。但是,这只会弄乱您的默认验证。

话虽如此,有多种方法可以解决并非总是需要的字段的“问题”,一种是使用一组单独的验证规则,例如:

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'
]);

另见

【讨论】:

  • 好吧,它的工作,但改为更改用户 id = 2 的密码,创建了一个所有字段为空和新密码的新 id
  • @ThiagoMoraes 对我来说效果很好,也许您使用的是过时的版本,其中自动 "set isNew() to false" functionality 无法正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多