@roswww в другой раз пожалуйста создавай тему в подходящем разделе. "PHP для профессионалов" это для тех спрашивающих, чей собственный уровень и уровень вопроса выше среднего.
Как я понимаю теперь нужен токен и нужно сгенерить ссыль,чтобы при переходе пользователя по этой ссылки, происходило завершение его регистрации, внесение в БД. Как решение там на репах нашёл качественный модуль- https://github.com/dektrium/yii2-user . Мне нужно подсмотреть только как правельно сделан код завершающий регистрац.. а не весь модуль. Может быть есть решение лучше?
Привет, тоже делаю форму регистриции. Возникла проблема с проверкой на уникальность username. Форма: Код (Text): <?php $form = ActiveForm::begin([ 'action' => 'save', 'id' => 'addedUserForm', 'enableClientValidation' => TRUE, 'enableAjaxValidation' => TRUE, 'validateOnChange' => TRUE, ]);?> <?= $form->field($model, 'username') ?> <?= $form->field($model, 'password')->passwordInput() ?> <?= $form->field($model, 'fio') ?> <?= $form->field($model, 'email') ?> <label class="control-label" for="user-group"></label> <?php $items = [ '0' => 'Пользователь', '1' => 'Администратор' ]; $params = [ 'prompt' => 'Выберите группу пользователя' ]; ?> <?= $form->field($model, 'group')->dropDownList($items, $params);?> <div class="form-group"> <?= Html::submitButton('Добавить', ['class' => 'btn btn-primary added']) ?> </div> <?php ActiveForm::end(); ?> В моделе Код (Text): public function rules() { return [ [['username', 'password', 'email'], 'required'], ['email', 'email'], ['username', 'uniqUsername', 'skipOnEmpty' => false, 'skipOnError' => false], ['email', 'uniqEmail', 'skipOnEmpty' => false, 'skipOnError' => false], ]; public function uniqUsername($attribute, $param) { if (!$this->hasErrors()) { $user = (new User)->findByUsername($this->username); if ($user) { return $this->addError($attribute, 'Такой логин уже существует.'); } } } public function uniqEmail($attribute, $param) { if ($this->hasErrors()) { $user = (new User)->findByEmail($this->email); if ($user) { return $this->addError($attribute, 'Такой email уже существует.'); } } } public function findByUsername($username) { $user = User::find()->where(['username' => $username])->one(); return $user; } public function findByEmail($email) { $user = User::find()->where(['email' => $email])->one(); return $user; } } Я ожидаю, что при дубликате пользователя, покажет сообщение Такой логин уже существует. С помощью vardumper вижу, что методы находят дубликат но на форму сообщения с ошибкой не возвращается. Буду благодарен за помощь.
@Ric тогда надо делать отладку, смотри если вызывается uniqUsername и что там происходит, например доходит ли до addError
С помощью отладки вижу, что при вводе уже существующего username, происходит проход по методам uniqUsername и findByUsername, где в последнем находит пользователя и возвращает пользователя. Единственное что не хочет работать это добавление и вывод ошибки.
Зачем этот бред? 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
Вручную Yii::trace() смотри http://phpfaq.ru/debug https://netbeans.org/kb/docs/php/debugging_ru.html https://php.ru/forum/threads/howto-...i-po-shagam-i-s-kartinkami.58974/#post-474550 @Ric но @mkramer подсказал более правильный вариант