За последние 24 часа нас посетили 34938 программистов и 1749 роботов. Сейчас ищут 894 программиста ...

Реализация регистрации на Yii-2

Тема в разделе "Yii", создана пользователем roswww, 22 ноя 2016.

  1. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    @roswww в другой раз пожалуйста создавай тему в подходящем разделе.
    "PHP для профессионалов" это для тех спрашивающих, чей собственный уровень и уровень вопроса выше среднего.
     
    denis01 нравится это.
  2. roswww

    roswww Активный пользователь

    С нами с:
    15 окт 2016
    Сообщения:
    154
    Симпатии:
    4
    Адрес:
    Cтаврополь
    Как я понимаю теперь нужен токен и нужно сгенерить ссыль,чтобы при переходе пользователя по этой ссылки, происходило завершение его регистрации, внесение в БД. Как решение там на репах нашёл качественный модуль- https://github.com/dektrium/yii2-user .
    Мне нужно подсмотреть только как правельно сделан код завершающий регистрац.. а не весь модуль.
    Может быть есть решение лучше?
     
  3. roswww

    roswww Активный пользователь

    С нами с:
    15 окт 2016
    Сообщения:
    154
    Симпатии:
    4
    Адрес:
    Cтаврополь
    на этот вопрос решение нашёл
     
  4. Ric

    Ric Активный пользователь

    С нами с:
    9 фев 2011
    Сообщения:
    97
    Симпатии:
    2
    Привет, тоже делаю форму регистриции. Возникла проблема с проверкой на уникальность username.
    Форма:
    Код (Text):
    1.         <?php
    2.       $form = ActiveForm::begin([
    3.         'action' => 'save',
    4.         'id' => 'addedUserForm',
    5.         'enableClientValidation' => TRUE,
    6.         'enableAjaxValidation'   => TRUE,
    7.         'validateOnChange'       => TRUE,
    8.       ]);?>
    9.       <?= $form->field($model, 'username') ?>
    10.       <?= $form->field($model, 'password')->passwordInput() ?>
    11.       <?= $form->field($model, 'fio') ?>
    12.       <?= $form->field($model, 'email') ?>
    13.       <label class="control-label" for="user-group"></label>
    14.       <?php
    15.       $items = [ '0' => 'Пользователь', '1' => 'Администратор' ];
    16.       $params = [ 'prompt' => 'Выберите группу пользователя' ];
    17.        ?>
    18.        <?= $form->field($model, 'group')->dropDownList($items, $params);?>
    19.        <div class="form-group">
    20.          <?= Html::submitButton('Добавить', ['class' => 'btn btn-primary added']) ?>
    21.        </div>
    22.        <?php ActiveForm::end(); ?>
    В моделе
    Код (Text):
    1.   public function rules() {
    2.     return [
    3.       [['username', 'password', 'email'], 'required'],
    4.       ['email', 'email'],
    5.       ['username', 'uniqUsername', 'skipOnEmpty' => false, 'skipOnError' => false],
    6.       ['email', 'uniqEmail', 'skipOnEmpty' => false, 'skipOnError' => false],
    7.     ];
    8.  
    9.   public function uniqUsername($attribute, $param) {
    10.     if (!$this->hasErrors()) {
    11.       $user = (new User)->findByUsername($this->username);
    12.       if ($user) {
    13.         return $this->addError($attribute, 'Такой логин уже существует.');
    14.       }
    15.     }
    16.   }
    17.  
    18.   public function uniqEmail($attribute, $param) {
    19.     if ($this->hasErrors()) {
    20.       $user = (new User)->findByEmail($this->email);
    21.       if ($user) {
    22.         return $this->addError($attribute, 'Такой email уже существует.');
    23.       }
    24.     }
    25.   }
    26.  
    27. public function findByUsername($username) {
    28.     $user = User::find()->where(['username' => $username])->one();
    29.     return $user;
    30.   }
    31.  
    32.   public function findByEmail($email) {
    33.     $user = User::find()->where(['email' => $email])->one();
    34.     return $user;
    35.   }
    36.   }
    Я ожидаю, что при дубликате пользователя, покажет сообщение Такой логин уже существует.
    С помощью vardumper вижу, что методы находят дубликат но на форму сообщения с ошибкой не возвращается.
    Буду благодарен за помощь.
     
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    возможно что-то из этого мешает
     
    Ric нравится это.
  6. Ric

    Ric Активный пользователь

    С нами с:
    9 фев 2011
    Сообщения:
    97
    Симпатии:
    2
    Я пробывал закомментировать эти строки, без изменений.
    Есть ещё предположения?
     
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @Ric тогда надо делать отладку, смотри если вызывается uniqUsername и что там происходит, например доходит ли до addError
     
    Ric нравится это.
  8. Ric

    Ric Активный пользователь

    С нами с:
    9 фев 2011
    Сообщения:
    97
    Симпатии:
    2
    С помощью отладки вижу, что при вводе уже существующего username, происходит проход по методам uniqUsername и findByUsername, где в последнем находит пользователя и возвращает пользователя. Единственное что не хочет работать это добавление и вывод ошибки.
     
  9. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    сюда доходит? это было главным в вопросе
     
    Ric нравится это.
  10. Ric

    Ric Активный пользователь

    С нами с:
    9 фев 2011
    Сообщения:
    97
    Симпатии:
    2
    В сам блок if заходит, а вот проверить $this->addError(...); не получилось, как это можно сделать?
     
  11. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Зачем этот бред? findByUsername должен быть статическим. Потом, для ajax-валидации там в контроллере должен быть специальный код предусмотрен. Он есть? http://www.yiiframework.com/doc-2.0/guide-input-validation.html#ajax-validation
    --- Добавлено ---
    А вообще, я беру обычно за основу вот эту модель, и допиливаю. Это стандартное advanced-приложение:
    https://github.com/yiisoft/yii2-app-advanced/blob/master/frontend/models/SignupForm.php
     
    Ric нравится это.
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Ric нравится это.
  13. Ric

    Ric Активный пользователь

    С нами с:
    9 фев 2011
    Сообщения:
    97
    Симпатии:
    2