Отключение проверки для определенной формы (логин пользователя) - PullRequest
1 голос
/ 29 декабря 2010

проблема

У меня есть форма входа на каждой странице (в правом меню). Проблема в том, что когда пользователь находится на странице регистрации, поля из формы входа проверяются. У меня есть поля username и password в обеих формах, и оба они проверены.

Идеи:

  • Различные имена полей для формы регистрации (register_username, register_password, register_email), а затем установить нормальные имена перед сохранением.
  • Другая модель (но также использует таблицу пользователей) для формы входа?

В любом случае, мне просто интересно, как лучше это решить.

Ответы [ 4 ]

1 голос
/ 29 декабря 2010

Я предполагаю, что обе формы будут отправлены на разные действия, при этом форма регистрации будет отправлена ​​на Users->register(), а форма входа будет отправлена ​​на Users->login().

Я бы предположил, что когда вы находитесь в действии register(), вы можете попробовать скопировать соответствующую переменную в другой ассоциативный массив и затем проверить и сохранить ее, а не проверять и сохранять переменную $this->data.

0 голосов
/ 30 марта 2013

Может быть желательно проверить вашу модель только с использованием подмножества проверок, указанных в вашей модели.Например, скажем, у вас была модель пользователя с полями для имени, фамилии, адреса электронной почты и пароля.В этом случае при создании или редактировании пользователя вы хотите проверить все 4 правила поля.Тем не менее, когда пользователь входит в систему, вы проверяете только правила электронной почты и пароля.Для этого вы можете передать массив параметров, определяющий поля для проверки:

if ($this->User->validates(array('fieldList' => array('email', 'password')))) {
    // valid
} else {
    // invalid
}
0 голосов
/ 06 января 2011

Я не пробовал две формы с одинаковыми входами, но это работает для двух форм с разными входами.Я не понимаю, почему это не должно работать для ваших нужд.

Просмотр: Убедитесь, что каждая кнопка отправки имеет значение имени, чтобы $ this-> params мог его идентифицировать.

//first form ...
<?php
    $profile_options = array('label' => 'edit profile',
                              'name' => 'form1');
    echo $this->Form->end($profile_options);
?>
//second form ...
<?php
    $password_options = array('label' => 'edit password',
                              'name' => 'form2');
    echo $this->Form->end($password_options);
?>

Действие контроллера: используйте $ this-> params для проверки каждой отправки формы

if(isset($this->params['form']['form1'])){
    $this->User->set($this->data); //necessary to specify validation rules
       if($this->User->validates(array('fieldList' => array('email')))){
             $this->User->saveField('email', $this->data['User']['email']);
       }
}
elseif(isset($this->params['form']['form2'])){
    //same deal for second form
}
0 голосов
/ 30 декабря 2010

Ваш второй вариант верен.Я сталкивался с этой проблемой ранее и написал об этом статью в пекарне: Несколько форм на странице для одной и той же модели

Основная идея заключается в создании отдельных моделей для каждой формы, расширяющих исходнуюмодель:

class RegisterForm extends User {
}

Затем загрузите эти формы в свой контроллер, как вам удобно:

$this->loadModel('RegisterForm');

Затем вызовите проверку как обычно:

$this->RegisterForm->save($this->data);

Для вашего конкретногоВ этом случае вы можете не захотеть создавать модель LoginForm и использовать только модель RegisterForm.Это позволит вам воспользоваться магией, которую имеет AuthComponent.

HTH.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...