У меня есть форма регистрации, к которой пользователь может получить доступ через приглашение.Например, приглашенный пользователь может перейти на /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
соответствующего контроллера, а идентификатор пользователя устанавливается при входе.