Переделываю сайт клиента. Раньше на сайте по сути не было регистрации нормальной и юзер записывался в таблицу чуть ли не напрямую. Теперь человек решил что надо делать все правильно.
Вот я и делаю. Вот класс формы
Код: Выделить всё
class SignupForm extends Model
{
const SCENARIO_USER = 'user_create';
const SCENARIO_COMPANY = 'company_create';
public $users_type;
public $users_fio;
public $users_name;
public $users_address;
public $users_about;
public $users_email;
public $users_password;
public $confirm_password;
public $users_phone;
public $users_region;
public $users_city;
public $users_hash;
public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios[self::SCENARIO_USER] = ['users_type', 'users_fio', 'users_phone', 'users_email', 'users_password', 'users_phone', 'users_region', 'users_city', 'users_hash'];
$scenarios[self::SCENARIO_COMPANY] = ['users_type', 'users_name', 'users_address', 'users_about', 'users_email', 'users_password', 'users_phone', 'users_region', 'users_city', 'users_hash'];
return $scenarios;
}
public function rules()
{
return [
['users_type', 'integer'],
[['users_fio', 'users_name'], 'trim'],
[['users_fio', 'users_name'], 'string', 'min' => 2, 'max' => 255],
[['users_fio', 'users_name'], 'match', 'pattern' => '/^[А-ЯЁа-яё0-9-]+$/', 'message' => 'В имени пользователя и названии организации разрешены только русские буквы, цифры от 0 до 9 и дефис'],
[['users_fio', 'users_phone'] , 'required', 'on' => self::SCENARIO_USER],
[['users_name', 'users_address', 'users_phone'] , 'required', 'on' => self::SCENARIO_COMPANY],
[['users_about'], 'string'],
[['users_address'], 'string'],
['users_email', 'trim'],
['users_email', 'required'],
['users_email', 'email'],
['users_email', 'string', 'max' => 255],
['users_email', 'unique', 'targetClass' => User::class, 'message' => 'Пользователь с таким email уже существует.'],
[['users_password', 'confirm_password'], 'required'],
[['users_password', 'confirm_password'], 'string', 'min' => 6],
['confirm_password', 'compare', 'compareAttribute' => 'users_password', 'message' => 'Введенные пароли не совпадают.'],
[['users_region', 'users_city'], 'required'],
[['users_region', 'users_city'], 'integer'],
['users_hash', 'safe']
];
}
public function attributeLabels(): array
{
return [
'users_type' => 'Тип пользователя',
'users_fio' => 'Имя для физ. лица',
'users_name' => 'Название компании',
'users_address' => 'Адрес компании',
'users_about' => 'Описание компании',
'users_email' => 'Email пользователя',
'users_password' => 'Пароль',
'confirm_password' => 'Подтверждение пароля',
'users_phone' => 'Телефоны',
'users_region' => 'Регион пользователя',
'users_city' => 'Город',
];
}
public function signup(): bool
{
if ($this->validate()) {
$user = new User();
$user->users_fio = $this->users_fio;
$user->users_name = $this->users_name;
$user->users_address = $this->users_address;
$user->users_about = $this->users_about;
$user->users_email = $this->users_email;
$user->users_password = $user->setPassword($this->users_password);
$user->users_check_email = User::STATUS_WAIT;
$user->users_hash = base64_encode($user->users_phone.$user->users_email.md5(time()));
return $user->save();
}else{
return false;
}
}
}
Код: Выделить всё
<?php $form = ActiveForm::begin(['id' => 'create-user']); ?>
<?= \frontend\widgets\usertypeselect\UserTypeSelect::widget([
'field' => 'user-users_type',
'selected' => $model->users_type,
]) ?>
<?= $form->field($model, 'users_type')->hiddenInput()->label(false); ?>
<div id="div_fiz_lico"
class="contact-info__wrapper" <?= isset($model->users_type) && $model->users_type == UserType::COMPANY ? ' style="display:none" ' : ''; ?> <?= !isset($model->users_type) ? 'style="display:none"' : ''; ?>>
<div class="contact-info__label">
<?= Yii::t('app', 'Имя'); ?>:<span class="glyphicon glyphicon-asterisk color-red icon-aster"></span>
</div>
<div class="contact-info__input">
<?= $form->field($model, 'users_fio')->label(false)->textInput(['maxlength' => true]) ?>
</div>
</div>
<div id="div_magazin"
class="contact-info__wrapper" <?= isset($model->users_type) && $model->users_type == UserType::USER ? 'style="display:none"' : ''; ?> >
<div class="contact-info__line">
<div class="<?= $model->hasErrors('users_name') ? "contact-info__label contact-info__label--warning" : "contact-info__label"; ?>">
<?= Yii::t('app', 'Название организации'); ?><span
class="glyphicon glyphicon-asterisk color-red icon-aster"></span>:
</div>
<div class="contact-info__input">
<?= $form->field($model, 'users_name')->textInput(['maxlength' => true])->label(false) ?>
</div>
</div>
<div class="contact-info__line">
<div class="<?= $model->hasErrors('users_address') ? "contact-info__label contact-info__label--warning" : "contact-info__label"; ?>">
<?= Yii::t('app', 'Адрес организации') ?>
<span class="glyphicon glyphicon-asterisk color-red icon-aster"></span> :
<?php echo '<span class="glyphicon glyphicon-question-sign ico_question" data-toggle="tooltip" data-placement="bottom" title="' . Yii::t('app', 'Этот адрес мы будем показывать на карте - так вас дополнительно смогут найти. Укажите максимально точно свой адрес нахождения') . '" ></span>';?>
</div>
<div class="contact-info__input">
<?= $form->field($model, 'users_address')->textarea(['rows' => 3])->label(false) ?>
</div>
</div>
<div class="contact-info__line">
<?php
echo '<span class="glyphicon glyphicon-plus icon_registration"></span> ' . Yii::t('app', 'После регистрации вы сможете добавить представительства (офисы, филиалы) своей организации.') . '</span>';
echo '<span class="glyphicon glyphicon-question-sign ico_question" data-toggle="tooltip" data-placement="right" title="'.Yii::t('app', 'Опубликованные объявления будут отображаться в городах нахождения представительств.') .'" ></span>';
?>
</div>
<br/>
<div class="contact-info__line">
<div class="contact-info__label"><?= Yii::t('app', 'Описание организации'); ?>:</div>
<div class="contact-info__input">
<?= $form->field($model, 'users_about')->textarea(['rows' => 3])->label(false) ?>
</div>
</div>
</div>
<div class='reg-upload'>
<span class="glyphicon glyphicon-picture icon_registration"></span>
<?= Yii::t('app', 'Добавить изображения можно после регистрации в меню «Настройки».'); ?>
</div>
<br/>
<div class="contact-info__line">
<div class="<?= $model->hasErrors('users_phone') ? "contact-info__label contact-info__label--warning" : "contact-info__label"; ?>">
<?= Yii::t('app', 'Номера телефонов'); ?>:<span
class="glyphicon glyphicon-asterisk color-red icon-aster"></span>
</div>
<div class="ml-5">
<?= PhoneInput::widget([
'phones' => $model->users_phone
]) ?>
</div>
<div class="frm_hint"><?= Yii::t('app', 'Укажите дополнительные контактные номера телефонов'); ?></div>
</div>
<!--<div class="contact-info__line" id="internet-shop">
<label class="contact-info__label" for="flag_internet_shop"><?/*= Yii::t('app', 'Мы – интернет-магазин'); */?></label>
<div class="contact-info__input">
<input class="contact-info__checkbox" type="checkbox" name="flag_internet_shop"
value='<?/*= isset($_POST['flag_internet_shop']) ? $_POST['flag_internet_shop'] : '2'; */?>' <?php /*if (isset($_POST['flag_internet_shop'])) if ($_POST['flag_internet_shop'] == '2') echo 'checked'; */?>
id="flag_internet_shop">
</div>
</div>-->
<div class="contact-info__line">
<div class="<?= $model->hasErrors('users_email') ? "contact-info__label contact-info__label--warning" : "contact-info__label"; ?>">
E-mail:<span class="glyphicon glyphicon-asterisk color-red icon-aster"></span>
<?php echo '<span class="glyphicon glyphicon-question-sign ico_question" data-toggle="tooltip" data-placement="bottom" title="'.Yii::t('app', 'E-mail используется в качестве логина для авторизации на сайте') .'" ></span>';?>
</div>
<div class="contact-info__email">
<?= $form->field($model, 'users_email')->textInput(['maxlength' => true])->label(false) ?>
</div>
</div>
<div class="contact-info__line">
<div class="contact-info__label">
<?= Yii::t('app', 'Пароль'); ?>:<span
class="glyphicon glyphicon-asterisk color-red icon-aster"></span>
<?php echo '<span class="glyphicon glyphicon-question-sign ico_question" data-toggle="tooltip" data-placement="bottom" title="'.Yii::t('app', 'Запомните свой пароль. Он необходим для входа в систему. Не храните пароль на рабочем столе!') .'" ></span>';?>
</div>
<div class="contact-info__password">
<?= $form->field($model, 'users_password')->passwordInput()->label(false) ?>
</div>
</div>
<div class="contact-info__line">
<div class="contact-info__label">
<?= Yii::t('app', 'Подтверждение пароля'); ?>:<span
class="glyphicon glyphicon-asterisk color-red icon-aster"></span>
</div>
<div class="contact-info__password">
<?= $form->field($model, 'confirm_password')->passwordInput()->label(false) ?>
</div>
</div>
<?= CountySelect::widget([
'labels' => true,
'viewAllCities' => false,
'city' => isset($model->users_city) ? Cities::getOrSetById($model->users_city) : Yii::$app->prefix->data
]); ?>
<div class="reg-info"><?= Yii::t('app', 'Поля, отмеченные символом (') ?><span
class="glyphicon glyphicon-asterisk color-red icon-aster"></span>
), <?= Yii::t('app', 'обязательны для заполнения.'); ?></div>
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 text-center reg-submit">
<?= Html::submitButton(Yii::t('app', 'Зарегистрироваться'), ['class' => 'btn btn-success']); ?>
</div>
<?= $form->errorSummary($model)?>
<?php ActiveForm::end(); ?>
<?php
$js = "
var form = $('#create-user');
var type = form.find('#signupform-users_type');
type.attr('value', '2');
var user = form.find('#btn-fio');
var company = form.find('#btn-user');
user.click(function() {
type.attr('value', '1');
});
company.click(function() {
type.attr('value', '2');
});
";
$this->registerJs($js);
?>
Код: Выделить всё
$text = Text::getText('/registration.php');
$model = new SignupForm();
if ($model->load(Yii::$app->request->post())) {
$model->users_phone = FN::collect_phones();
if(!preg_match('/[0-9]{11,}/', $model->users_phone, $match_phone)){//если в номере меньше 11 цифр, то не добавляем на регистрацию
$model->addError('users_phone', Yii::t('app','Формат телефона неверный'));
}
$model->users_city = Yii::$app->request->post('cityid', 576);//132;
$model->users_region = Yii::$app->request->post('regid', 114);//254;
$model->users_hash = base64_encode($model->users_phone.$model->users_email.md5(time()));
/* @var User $user */
if ($user = $model->signup()) {
Yii::$app->session->setFlash('success', 'Проверьте свою почту. На указанный Email Вам отправлено письмо с дальнейшими инструкциями.');
return $this->redirect(Yii::$app->homeUrl);
}else{
Yii::$app->session->setFlash('error', 'Облом.');
print_r($model->getErrors());
}
}
return $this->render('signup', [
'model' => $model,
'text' => $text,
]);
Подскажите , может кто видит где я себя обманываю.
Заранее благодарен.