2015-02-03 5 views
4

Я начал изучать CakePHP 3 теперь он бета-версия, так ваше руководство не является полным еще ..CakePHP 3 - Изменение пароля

мне нужно изменить пароль пользователя, но это вызвало ошибку вспышки. Отладка переменной $ 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 $ пользователя Они поле таблицы пользователя.

[ 
    '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' 
    ] 
] 

Моего UserModel

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, используйте сущность с идентификатором пользователя, который вы хотите т обновить

UsersController

$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'); 
        } 

Thx всех ^^

+0

Попробуйте отладить '$ this-> request-> data' и посмотреть, если возвращает любое значение из этих необходимых полей. – bcesars

+0

Правильно, все значения возвращаются ['current-password' => 'çlk', 'new-password' => '1234', 'confirm-password' => '1234'] – TMoraes

+0

Моя форма - это три поля, текущий -password, new и confirm, я делаю проверку с помощью if clauses и его работы, я просто хочу «изменить» поле пароля – TMoraes

ответ

4

Вы требуете этих полей присутствия, так что это ожидаемое поведение. Согласно вашим комментариям, установка второго аргумента requirePresence() в "false" ничего не сделает, поскольку это строка, если вы хотите отключить эту проверку, вам нужно будет указать логическое значение, то есть false без кавычек. Однако это просто испортит вашу проверку по умолчанию.

Это, как говорится, есть различные пути решения «проблемы» полей не всегда быть необходимыми, один будет использовать отдельный набор правил проверки, что-то вроде:

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

Смотрите также

+0

ну, это сработало, но вместо этого изменил пароль пользователя id = 2, был создан новый идентификатор со всем полем пустым и новым паролем – TMoraes

+0

@ThiagoMoraes Прекрасно работает для меня, возможно, вы используете устаревшая версия, где автоматическая функция ["_set' isNew() 'to' false'_ "] (http://book.cakephp.org/3.0/en/orm/saving-data.html#saving-entities) isn ' t работает правильно. – ndm

+0

Я получаю это, я отредактирую и очень люблю своего друга: D – TMoraes

Смежные вопросы