У меня есть проблема с проверкой Cakephp 2.CakePHP 2 - Подтверждающие поля пароля
Я пытаюсь проверить несколько полей в форме редактирования. Некоторые из них являются паролем и подтверждают пароль.
Я хочу проверить их только в том случае, если они поставляются. Если они пусты, я не изменяю пароль, но если пользователь пишет над ними, я бы хотел проверить, имеют ли они минимальную длину или совпадения паролей.
Код:
'pwd' => array(
'length' => array(
'rule' => array('between', 8, 40),
'message' => 'Your password must be between 8 and 40 characters.',
'allowEmpty' => true
),
),
'pwd_repeat' => array(
'length' => array(
'rule' => array('between', 8, 40),
'message' => 'Your password must be between 8 and 40 characters.',
'allowEmpty' => true
),
'compare' => array(
'rule' => array('validate_passwords'),
'message' => 'The passwords you entered do not match.',
'allowEmpty' => true
),
Я не знаю, если я должен определить некоторые правила при редактировании функции() в контроллере или оно должно быть достаточно, но мой код не работает.
Спасибо!
Edit: (код контроллера)
public function edit($id = null) {
if (!$this->User->exists($id)) {
throw new NotFoundException(__('Usuario incorrecto'));
}
if ($this->request->is('post') || $this->request->is('put')) {
if ($this->User->save($this->request->data)) {
$this->Session->setFlash(__('El usuario ha sido actualizado.'));
return $this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('El usuario no ha podido actualizarse. Por favor, inténtelo de nuevo.'));
}
unset($this->request->data['User']['pwd']);
unset($this->request->data['User']['pwd_repeat']);
} else {
$options = array('conditions' => array('User.' . $this->User->primaryKey => $id));
$this->request->data = $this->User->find('first', $options);
}
$roles = $this->User->Role->find('list');
$this->set(compact('roles'));
}
(View Code)
<div id="contenedor" class="users form">
<?php echo $this->Form->create('User', array('name' => 'form')); ?>
<fieldset>
<legend><?php echo __('Editar Usuario'); ?></legend>
<?php
echo $this->Form->input('id');
echo $this->Form->input('username', array('label' => __('Usuario')));
echo $this->Form->input('pwd', array('label' => __('Contraseña'), 'type' => 'password', 'name' => 'pass', 'onKeyUp' => 'habilita()', 'value' => ''));
echo $this->Form->input('pwd_repeat', array('label' => __('Repite Contraseña'), 'type' => 'password', 'name' => 'rpass', 'disabled' => 'disabled'));
echo $this->Form->input('firstname', array('label' => __('Nombre')));
echo $this->Form->input('lastname', array('label' => __('Apellidos')));
echo $this->Form->input('telephone', array('label' => __('Teléfono')));
echo $this->Form->input('email', array('label' => __('Email')));
echo $this->Form->input('role_id', array('label' => __('Rol')));
?>
</fieldset>
<?php echo $this->Form->end(__('Aceptar')); ?>
насчет 'функции valdidate_passwords' –
Совет: Read [рабочий-с паролями-в-CakePHP] (http://www.dereuromark.de/2011/08/25/working-with-passwords- in-cakephp /) – mark
@mark Я пробовал ваше решение раньше, но он не работает, как мне нужно. Ваше решение позволило мне оставить поля пароля пустыми, но не проверять, поставляются ли они. Я думаю, что я делаю что-то неправильно – Luis