ثبت نام در Yii2

برای عمل ثبت نام خود فریم ورک Yii کلاس ها و توابع بسیار خوبی داره که میتونین ازش استفاده کنین.
در قسمت front کنترلر site اکشن Signup به صورت پیش فرض وجود داره
با کد زیر :

public function actionSignup() {
        $model = new SignupForm();
        if ($model->load(Yii::$app->request->post())) {
            if ($user = $model->signup()) {
                if (Yii::$app->getUser()->login($user)) {
                    return $this->goHome();
                }
            }
        }
        return $this->render('signup', [
                    'model' => $model,
        ]);
    }

همونطور که میبینید مدلی به نام SignupForm وجود داره که کار اصلی رو انجام میده
توجه داشته باشین که ویوی ما که همون فورم ثبت نام هست در مسیر views/site/signup قرار دارد که اطلاعات را از کاربر میگیرد .
به صورت پیش فرض چد ستون (فیلد) مشخص در دیتابیس وجود دارد . در صورتی که ستون های دیگه ای لازم دارین میتونین به دیتابیس اضافه کنین و در فورم قرار بدین
فورم ثبت نام من شامل کد زیر می باشد :

            <?php $form = ActiveForm::begin(['id' => 'form-signup']); ?>
            <?= $form->field($model, 'username')->textInput(['autofocus' => true]) ?>
            <?= $form->field($model, 'email') ?>
            <?= $form->field($model, 'password')->passwordInput() ?>
            <?= $form->field($model, 'first_name') ?>
            <?= $form->field($model, 'last_name') ?>
            <?=
            $form->field($model, 'gender')->dropDownList(
                    array(
                        '۰'=>'زن',
                        '۱'=>'مرد',
                    )
            );
            ?>
            <?= $form->field($model, 'mobile') ?>
            <?= $form->field($model, 'phone') ?>
            <?= $form->field($model, 'address') ?>
                <?= $form->field($model, 'biography') ?>
<?= Html::submitButton('Signup', ['class' => 'btn btn-primary', 'name' => 'signup-button']) ?>
<?php ActiveForm::end(); ?>

در actionSignup ما یه مدل نیو کردیم . سپس اگر اطلاعاتی از فورم پست POST شده بود اومدیم یه کاری انجام دادیم
قبل از توضیح این بخش مدلSignupForm بررسی میکنیم
در مدل که در مسیر frontend/models/signup Form قرار داره من متغییر هایی که لازم داشتم رو تعریف کردم :

<?php
namespace frontend\models;
use common\models\User;
use yii\base\Model;
use Yii;
/**
 * Signup form
 */
class SignupForm extends Model {
    public $username;
    public $email;
    public $password;
    public $first_name;
    public $last_name;
    public $gender;
    public $activation_code;
    public $mobile;
    public $phone;
    public $address;
    public $biography;
    /**
     * @inheritdoc
     */
    public function rules() {
        return [
            [['email', 'username', 'first_name', 'last_name', 'phone', 'mobile'], 'filter', 'filter' => 'trim'],
            [['password', 'email', 'username', 'first_name', 'last_name', 'phone', 'mobile'], 'required'],
            ['username', 'unique', 'targetClass' => '\common\models\User', 'message' => 'This username has already been taken.'],
            ['username', 'string', 'min' => 2, 'max' => 255],
            ['email', 'email'],
            ['email', 'string', 'max' => 255],
            ['email', 'unique', 'targetClass' => '\common\models\User', 'message' => 'This email address has already been taken.'],
            ['password', 'string', 'min' => 6],
        ];
    }
    public function attributeLabels() {
        return [
            'id' => Yii::t('app', 'کد کاربری'),
            'username' => Yii::t('app', 'نام کاربری'),
            'first_name' => Yii::t('app', 'نام'),
            'last_name' => Yii::t('app', 'نام خانوادگی'),
            'email' => Yii::t('app', 'ایمیل'),
            'password' => Yii::t('app', 'رمز عبور'),
            'status' => Yii::t('app', 'وضعیت ثبت نام'),
            'is_active' => Yii::t('app', 'وضعیت کاربر'),
            'activation_code' => Yii::t('app', 'کد فعال سازی'),
            'last_password_change' => Yii::t('app', 'تاریخ آخرین تغییر رمز عبور'),
            'gender' => Yii::t('app', 'جنسیت'),
            'confrimed_date' => Yii::t('app', 'تاریخ تایید کاربر'),
            'last_login' => Yii::t('app', 'تاریخ آخرین ورود'),
            'failed_login_count' => Yii::t('app', 'تعداد تلاش ناموفق در ورود به سایت'),
            'last_lockout' => Yii::t('app', 'تاریخ آخرین قفل'),
            'is_locked' => Yii::t('app', 'وضعیت قفل بودن کاربر'),
            'mobile' => Yii::t('app', 'موبایل'),
            'phone' => Yii::t('app', 'تلفن ثابت'),
            'address' => Yii::t('app', 'آدرس'),
            'last_ip' => Yii::t('app', 'آخرین آی پی'),
            'biography' => Yii::t('app', 'بیوگرافی'),
            'is_blacklist' => Yii::t('app', 'لیست سیاه'),
        ];
    }
    /**
     * Signs user up.
     *
     * @return User|null the saved model or null if saving fails
     */
    public function signup() {
        if (!$this->validate()) {
            return null;
        }
        $user = new User();
        $user->username = $this->username;
        $user->first_name = $this->first_name;
        $user->last_name = $this->last_name;
        $user->mobile = $this->mobile;
        $user->phone = $this->phone;
        $user->gender = $this->gender;
        $user->email = $this->email;
        $user->address = $this->address;
        $user->biography = $this->biography;
        $user->generateActivationCode();
        $user->setPassword($this->password);
        $user->generateAuthKey();
        return $user->save() ? $user : null;
    }
}

برگردیم به اکشنمون
همونطور که میبینید بعد از پست شدن دیتا متد signup اجرا شده
این متد همونیه که در مدل تعریف کردیم :

  public function signup() {
        if (!$this->validate()) {
            return null;
        }
        $user = new User();
        $user->username = $this->username;
        $user->first_name = $this->first_name;
        $user->last_name = $this->last_name;
        $user->mobile = $this->mobile;
        $user->phone = $this->phone;
        $user->gender = $this->gender;
        $user->email = $this->email;
        $user->address = $this->address;
        $user->biography = $this->biography;
        $user->generateActivationCode();
        $user->setPassword($this->password);
        $user->generateAuthKey();
        return $user->save() ? $user : null;
    }

کار پیچیده ای انجام ندادیم
فقط ابتدا اعتبار سنجی رو انجام دادیم با متد validate ,بعدش اومدیم مدلuser رو ایجاد کردیم و اطلاعات رو ذخیره کردیم .
به همین سادگی.
نکته فقط این که فریم ورک یه سری توابع داره که ازش استفاده کردیم : مثل :
setPassword و generateAuthKey که رمز عبور و آتنتیکیشن کی را تولید میکند
اما generateActivationCode من خودم ایجاد کردم
چیز پیچیده ای هم نیست
این توابع در مسیر common\models و در فایل User.php قرار داده.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *