Форма не отправляется после сбоя пользовательского правила проверки один раз

Итак, у меня есть форма cakePHP (2.4.6), и я пытаюсь создать типичную форму регистрации пользователя со вторым полем пароля. Я написал специальное правило, чтобы проверить, совпадают ли значения полей пароля.

В первый раз, когда я отправляю форму, проверка работает, но после одного раза с ошибкой проверки форма снова отказывается отправляться. Кто-нибудь знает, почему? Это происходит с любой формой, которая имеет настраиваемые правила проверки ...

Вот модель для справки:

class User extends AppModel {

    var $primaryKey = 'username';
    public $validate = array(
        'username' => array(
            'between' => array(
                'rule' => array('between', 8, 20),
                'message' => 'Usernames must be 8-20 characters long.',
            ),
            'reg' => array(
                'rule' => '/^[\w]{8,20}$/',
                'message' => 'Valid characters: a-z, A-Z, 0-9, _'
            ),
        ),
        'password' => array(
            'between' => array(
                'rule' => array('between', 8, 20),
                'message' => 'Passwords must be 8-20 characters long.',
            ),
            'reg' => array(
                'rule' => '/^[\w\.\-]{8,20}$/',
                'message' => 'Valid characters: a-z, A-Z, 0-9, _, -, .'
            ),
        ),
        're_password' => array(
            'same' => array(
                'rule' => array('same', 'password'),
                'message' => 'Passwords do not match!',
            )
        ),
    );

    public function same($first, $second) {
        $val = '';
        foreach($first as $k=>$v) {
            $val = $v;
        }
        return $this->data[$this->$second] == $val;
    }
}

Контроллер add() функция:

public function add() {
    if ($this->request->is('post')) {
        pr($this->request->data);
        $this->User->create();
        if ($this->User->save($this->request->data)) {
            $this->Session->setFlash(__('The user has been saved.'));
            return $this->redirect(array('controller'=>'home'));
        } else {
            $this->Session->setFlash(__('The user could not be saved. Please, try again.'));
        }
    }
}

Первая отправка работает нормально: первая отправка

Но после того, как я получаю сообщения об ошибках проверки, независимо от того, меняю ли я входные значения так, чтобы они не возникали, нажатие кнопки «Отправить» ничего не делает - страница просто обновляется с любыми значениями в полях ввода, например: после

Ни мгновенного сообщения, ни сообщения об ошибке проверки, ничего. (Извините, без репутации, не могу публиковать изображения ..)


person kkontagion    schedule 26.07.2014    source источник
comment
И под отказывается представить вы имеете в виду ...? Ваш браузер не отправляет данные или в чем именно проблема? Или вы получаете ошибки? Как выглядит ваш взгляд? Как выглядит сгенерированный HTML? А что вы пробовали до сих пор для устранения проблемы? ps, пожалуйста, всегда указывайте точную версию CakePHP и помечайте свой вопрос соответствующим образом!   -  person ndm    schedule 26.07.2014
comment
попробуйте отладить результат отправки формы в контроллере ur, когда вы проверите if($this->request->is('post')) или if(!empty($this->request->data)) после этого, поместите debug($this->request->data), посмотрите, что будет на выходе   -  person hashmode    schedule 27.07.2014
comment
Какой код на самом деле находится в контроллере? Может быть, это просто отправка, насколько мы знаем.   -  person Dave    schedule 28.07.2014
comment
@hashmode - первая отладка работает, вторая тоже не появляется ...   -  person kkontagion    schedule 29.07.2014
comment
@Dave - функция очень простая, особых изменений не вносил. все равно добавил это к вопросу.   -  person kkontagion    schedule 29.07.2014
comment
Отсутствует какой-то код или информация. Не вижу причин, по которым в том, что вы опубликовали, может возникнуть такая проблема.   -  person Dave    schedule 29.07.2014
comment
@Dave Я больше ничего не менял, и это происходит с каждым проектом, если есть собственные правила проверки.   -  person kkontagion    schedule 29.07.2014


Ответы (1)


замени свой пост постом, поставь лайк

    public function add() {
    if ($this->request->is(array('post','put'))) {
        pr($this->request->data);
        $this->User->create();
        if ($this->User->save($this->request->data)) {
            $this->Session->setFlash(__('The user has been saved.'));
            return $this->redirect(array('controller'=>'home'));
        } else {
            $this->Session->setFlash(__('The user could not be saved. Please, try again.'));
        }
    }
}
person ABDU RAVOOF    schedule 03.09.2014