Проверка выполняется при начальной загрузке формы - PullRequest
0 голосов
/ 24 марта 2011

У меня есть форма регистрации, к которой пользователь может получить доступ через приглашение.Например, приглашенный пользователь может перейти на /users/register/[invite_code] и получить частично заполненную регистрационную форму.Я вижу то, чего не ожидал:

Если код приглашения действителен, мы возвращаем структуру пользователя и устанавливаем ее в $this->data, чтобы форма автоматически заполнялась.Предварительное заполнение работает, но при загрузке формы ошибки проверки данных отображаются так, как если бы я отправил форму.Я вижу много слов «[Имя поля] не может быть пустым», когда значение предварительно заполнено ».

В ответ на вопросы вызывается действие регистра для отображения и отправки формы.Код выглядит следующим образом:

public function register( $invite = null ) {
  # Handle a submitted registration
  if( !empty( $this->data ) ) {
    # Do stuff...

    if( $this->User->save( $this->data ) ) {
      $this->Session->setFlash( 'Welcome. Thanks for registering.', null, null, 'success' );
      $this->redirect( $this->Auth->redirect() );
    }
    else {
      $this->Session->setFlash( 'Oh noz. There\'s a problem with your registration.', null, null, 'validation' );
    }
  }

  # If an invite is passed, pull the user attached to that invite.
  if( !empty( $invite ) ) {
    # Attempt to pull the user that owns the invite

    if( empty( $user ) ) { # Unrecognized invite code
      # Do stuff...
    }
    else { # Invited user found
      if( !empty( $user['User']['password'] ) ) { # Invited user has already registered
        # Do stuff...
      }
      else { # This is the invited user
        $this->data = $user;
      }
    }
  }
}

Спасибо.

ОБНОВЛЕНИЕ

После возвращения к этому проблема возникает, когда я назначаю пользователядо $this->data.Когда я удаляю это, никаких ошибок проверки.К сожалению, предпопуляции тоже нет.Мне нужно последнее, поэтому мне нужно найти способ установки точек данных без вызова сообщений об ошибках.

ОБНОВЛЕНИЕ 2

Если я дам дамп $this->User->invalidFields(),еще в первой строке UsersController::beforeFilter() массив заполнен инвалидами.Как это возможно?Что я мог сделать в начале запроса, чтобы вызвать это?

ОБНОВЛЕНИЕ 3

Я также заметил, что при вводе UsersController::beforeFilter() значение$this->User->id уже установлено.Я понятия не имею, где и почему, но это кажется значительным.Насколько я знаю, первый шаг в действительном коде приложения - это метод beforeFilter соответствующего контроллера, а идентификатор пользователя устанавливается при входе.

Ответы [ 3 ]

0 голосов
/ 25 марта 2011

Это странно, я уже сделал это без проблем.Если я правильно понимаю, форма отображается после последней.Вы можете проверить в контроллере, не прошла ли уже проверка при вводе блока с этим

echo debug($this->User->invalidFields() );
0 голосов
/ 11 мая 2011

Функция контроллера loadModel (), к сожалению, устанавливает свойство id в модели на основе первого параметра вашего действия. Это большое раздражение, которое было удалено в CakePHP 2.0. Тем не менее, нет кода, который будет автоматически проверять ваши поля после установки идентификатора, поэтому я предполагаю, что у вас есть компонент, обрабатывающий автоматическую проверку, или у вас есть код в вашем режиме, который будет делать это при создании модели.

Если вы не можете найти код, который автоматически проверяет ваши данные, или не хотите его изменять, я предлагаю переопределить loadModel () в вашем контроллере, чтобы удалить присвоение идентификатора, или просто использовать именованный параметр для ваших действий.

0 голосов
/ 25 марта 2011

1) Вы изначально устанавливаете $ this-> data перед $ this-> Model-> save?

...