Yii Framework Forum: ثبت نام کاربر - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

ثبت نام کاربر mvc ثبت نام کاربر با استاندارد

#1 User is offline   hosein_sh 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 40
  • Joined: 27-October 14

Posted 14 June 2016 - 10:18 AM


سلام دوستان
یه ثبت نام کاربر ساده نوشتم میخواستم ببینم استانداردهای
mvc را رعایت کرده ام یا
اگه مشکلی بود خوشحال میشم بگید


<?php

namespace app\controllers;

use app\models\Users;
use Yii;

class UsersController extends \yii\web\Controller {

    public function actionIndex() {
        return $this->render('index');
    }

    public function actionRegister() {

        $user = new Users();
        if ($user->load(Yii::$app->request->post()) && $user->validate()) {
           // $values = \Yii::$app->request->post();
            $user->register_user();
            return $this->refresh();
        } else {
            return $this->render('index', ['model' => $user]);
        }
    }

}



<?php

namespace app\models;

use Yii;

/**
 * This is the model class for table "{{%shop_users}}".
 *
 * @property integer $id
 * @property string $fname
 * @property string $email
 * @property string $user
 * @property string $pass
 * @property integer $phone
 * @property string $address
 * @property string $codemeli
 * @property string $image
 * @property integer $type
 */
class Users extends \yii\db\ActiveRecord {

    /**
     * @inheritdoc
     */
    public static function tableName() {
        return '{{%shop_users}}';
    }

    /**
     * @inheritdoc
     */
    public function rules() {
        return [
            [['fname', 'email', 'user', 'pass', 'type', 'lname'], 'required', 'message' => '{attribute} نباید خالی باشد'],
            [['phone', 'type'], 'integer'],
            [['address'], 'string'],
            [['fname', 'email', 'user'], 'string', 'max' => 255],
            [['pass'], 'string', 'max' => 125],
            [['codemeli'], 'string', 'max' => 10],
            [['image'], 'string', 'max' => 500],
            [['email'], 'email', 'message' => 'ادرس ایمیل معتبر وارد کنید'],
            [['email'], 'unique', 'message' => '{attribute}  تکراری میباشد'],
                //[['email'], 'unique', 'message' => 'ین ایمیل قبلا ثبت شده است ']
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels() {
        return [
            'id' => Yii::t('app', 'شناسه کاربر'),
            'fname' => Yii::t('app', 'نام '),
            'email' => Yii::t('app', 'ادرس ایمیل'),
            'user' => Yii::t('app', 'نام کاربری'),
            'pass' => Yii::t('app', 'رمز عبور'),
            'phone' => Yii::t('app', 'شماره همراه'),
            'address' => Yii::t('app', 'ادرس'),
            'codemeli' => Yii::t('app', 'کد ملی'),
            'image' => Yii::t('app', 'عکس'),
            'type' => Yii::t('app', 'جنسیت'),
            'lname' => Yii::t('app', 'نام خانوادگی'),
        ];
    }

    public function register_user() {

        if ($this->validate()) {
            $this->save();
            \Yii::$app->session->setFlash('user_register');
            return 1;
        } else {
            \Yii::$app->session->setFlash('user_not_register');
            return -1;
        }
    }

}



<?php
/* @var $this yii\web\View */

use yii\bootstrap\ActiveForm;
use yii\helpers\Html;
?>
<div class="row">
    <div class="col-lg-6" >
        <?php if (Yii::$app->session->hasFlash('user_not_register')) { ?>
            <div class="alert alert-danger">
                ثبت نام شما انجام نشد لطفا دوباره تلاش کنید.
            </div>
        <?php } ?>
        <?php if (Yii::$app->session->hasFlash('user_register')) { ?>
            <div class="alert alert-success">
                ثبت نام شما با موفقیت انجام شد.
            </div>
        <?php } ?>
        <div class="well">
            <?php $form = yii\widgets\ActiveForm::begin() ?>

            <?= $form->field($model, 'fname') ?>
            <?= $form->field($model, 'lname') ?>
            <?= $form->field($model, 'user') ?>
            <?= $form->field($model, 'pass')->passwordInput() ?>
            <?= $form->field($model, 'email') ?>
            <?= $form->field($model, 'type')->radioList(['0' => 'مرد', '1' => 'زن'], ['prompt' => ' انتخاب کنید']) ?>
            <?= "<div align ='left'>" . \yii\bootstrap\Html::submitButton('ثبت نام', ['class' => 'btn btn-success']) . "</div>" ?>
            <?php $form->end(); ?>
        </div>
        <?php ?>
    </div>
</div>


0

#2 User is offline   nima_naraghi 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 186
  • Joined: 15-March 13
  • Location:Iran, Tehran

Posted 17 June 2016 - 10:43 AM

بهتر است که یک مدل خودش را تغییر وضعیت ندهد. چون باعث تکرار بعضی چیزها میشه و کلا تغییر وضعیت ماهیت دستوری دارد که بر عهده کنترلر است. البته مدل میتواند یک مدل دیگر را تغییر وضعیت دهد و ایرادی ندارد. اما تغییر وضعیت یک مدل توسط خودش هم خوانایی را کم میکند و استفاده مجدد را. بعضا هم موجب عذاب وجدان برنامه نویس و کابوسهای شبانه میشود

شما مدل را در خودش تغییر وضعیت داده اید یعنی
$this->save()
را داخل خود مدل صدا زده اید
همین هم باعث شده
validate()
را دوبار صدا بزنید یعنی یکبار در کنترلر و یکبار در خود مدل
ضمن اینکه خود
save()
هم یکبار
validate()
را صدا میزند که میشود 3 بار
یعنی اگر من جای شما بودم دستور ذخیره را به داخل کنترلر میکشوندم و همونجا به قتل میرسوندمش.
پس همانطور که ملاحظه میکنید کاری که مدل با خودش کرده چه پیامدهای ددمنشیانه ای میتونه داشته باشه
البته اگر از بزرگان کسی آکادیمکتر میتونه این بحث را ادامه بده من شخصا ازش تشکر میکنم.

1

#3 User is offline   hosein_sh 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 40
  • Joined: 27-October 14

Posted 17 June 2016 - 04:49 PM

View Postnima_naraghi, on 17 June 2016 - 10:43 AM, said:

بهتر است که یک مدل خودش را تغییر وضعیت ندهد. چون باعث تکرار بعضی چیزها میشه و کلا تغییر وضعیت ماهیت دستوری دارد که بر عهده کنترلر است. البته مدل میتواند یک مدل دیگر را تغییر وضعیت دهد و ایرادی ندارد. اما تغییر وضعیت یک مدل توسط خودش هم خوانایی را کم میکند و استفاده مجدد را. بعضا هم موجب عذاب وجدان برنامه نویس و کابوسهای شبانه میشود

شما مدل را در خودش تغییر وضعیت داده اید یعنی
$this->save()
را داخل خود مدل صدا زده اید
همین هم باعث شده
validate()
را دوبار صدا بزنید یعنی یکبار در کنترلر و یکبار در خود مدل
ضمن اینکه خود
save()
هم یکبار
validate()
را صدا میزند که میشود 3 بار
یعنی اگر من جای شما بودم دستور ذخیره را به داخل کنترلر میکشوندم و همونجا به قتل میرسوندمش.
پس همانطور که ملاحظه میکنید کاری که مدل با خودش کرده چه پیامدهای ددمنشیانه ای میتونه داشته باشه
البته اگر از بزرگان کسی آکادیمکتر میتونه این بحث را ادامه بده من شخصا ازش تشکر میکنم.







سلام اقای نراقی
ممنون بابت وقتی که گذاشتید
داخل مدل به نظر خودمم هم جالب نیست باید حذف شود validate بله اون
قبلا استاندارد کد نویسی رو رعایت نمیکردم میخوام بدونم از لحاظ استاندارد معماری سه لایه
ما اطلاعات رو از کاربر میگیریم در داخل کنترلر بررسی میکنیم و صحت اطلاعات که تایید شد به مدل فرستاده میشود تا بقیه مثل ذخیره، بروزرسانی و کارهای دیگر انجام شود
و اینکه در این فریم ورک برای کارهای کاربران باید از همین مدل استفاده کرد یا یک مدل جدید ایجاد کنم
ممنون

0

#4 User is offline   nima_naraghi 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 186
  • Joined: 15-March 13
  • Location:Iran, Tehran

Posted 21 June 2016 - 03:16 PM

View Posthosein_sh, on 17 June 2016 - 04:49 PM, said:




سلام اقای نراقی
ممنون بابت وقتی که گذاشتید
داخل مدل به نظر خودمم هم جالب نیست باید حذف شود validate بله اون
قبلا استاندارد کد نویسی رو رعایت نمیکردم میخوام بدونم از لحاظ استاندارد معماری سه لایه
ما اطلاعات رو از کاربر میگیریم در داخل کنترلر بررسی میکنیم و صحت اطلاعات که تایید شد به مدل فرستاده میشود تا بقیه مثل ذخیره، بروزرسانی و کارهای دیگر انجام شود
و اینکه در این فریم ورک برای کارهای کاربران باید از همین مدل استفاده کرد یا یک مدل جدید ایجاد کنم
ممنون


سلام
بله حرفتون در مورد معماری سه لایه درسته با این تفاوت که پیاده سازی عملیات در مدل باید انجام شود از جمله عملیات "تغییر وضعیت" که در مورد مثال شما بدنه تابع
save()
اینکار را میکند.
ولی
دستور تغییر وضعیت باید از کنترلر صادر شود
در اینجا
save()
در داخل کنترل باید صدا زده شود.
برای درک بهتر این مسئله میتوانید مدل ها و کنترلرهایی که توسط
gii
ساخته میشوند را الگو قرار بدهید
با این حال اگر فکر میکنید اشتباه میکنم خوشحال میشم راهنماییم کنید

و در مورد مدل فعلی ، اگر منظورتون از کارهای کاربران امثال
Profile
و
Activity
است من پیشنهاد میکنم که مدل های جدا بسازید تا اینکه بخواهید به این مدل صفتهای جدید اضافه کنید. ولی برای کنترل دسترسی و ثبت نام و ورود و خروج این مدل خیلی قدرتمنده مگر اینکه نیازهای خیلی متفاوتی در پروژه داشته باشید

1

#5 User is offline   hosein_sh 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 40
  • Joined: 27-October 14

Posted 23 June 2016 - 10:04 AM

View Postnima_naraghi, on 21 June 2016 - 03:16 PM, said:

سلام
بله حرفتون در مورد معماری سه لایه درسته با این تفاوت که پیاده سازی عملیات در مدل باید انجام شود از جمله عملیات "تغییر وضعیت" که در مورد مثال شما بدنه تابع
save()
اینکار را میکند.
ولی
دستور تغییر وضعیت باید از کنترلر صادر شود
در اینجا
save()
در داخل کنترل باید صدا زده شود.
برای درک بهتر این مسئله میتوانید مدل ها و کنترلرهایی که توسط
gii
ساخته میشوند را الگو قرار بدهید
با این حال اگر فکر میکنید اشتباه میکنم خوشحال میشم راهنماییم کنید

و در مورد مدل فعلی ، اگر منظورتون از کارهای کاربران امثال
Profile
و
Activity
است من پیشنهاد میکنم که مدل های جدا بسازید تا اینکه بخواهید به این مدل صفتهای جدید اضافه کنید. ولی برای کنترل دسترسی و ثبت نام و ورود و خروج این مدل خیلی قدرتمنده مگر اینکه نیازهای خیلی متفاوتی در پروژه داشته باشید




Quote

سلام
ممنون

در این زمینه اطلاعاتی ندارم
خوشحال میشم دوستان دیگه راهنمایی کنند
لطف کردید که وقت گذاشتید


0

#6 User is offline   AmdZ 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 6
  • Joined: 25-July 16

Posted 25 July 2016 - 04:49 PM

سلام
خوب نوشتید ولی استاندارد رو رعایت نکردید.
مهمترینش هم اونکه برای مدل user باید اینترفیس yii\web\IdentityInterface رو ایمپلمنت کنید
خود کدی که جی تولید می کند بسیار مناسب و قابل تغییر به هر نحو هست.

0

#7 User is offline   hosein_sh 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 40
  • Joined: 27-October 14

Posted 26 July 2016 - 09:48 AM

View PostAmdZ, on 25 July 2016 - 04:49 PM, said:

سلام
خوب نوشتید ولی استاندارد رو رعایت نکردید.
مهمترینش هم اونکه برای مدل user باید اینترفیس yii\web\IdentityInterface رو ایمپلمنت کنید
خود کدی که جی تولید می کند بسیار مناسب و قابل تغییر به هر نحو هست.





سلام

ممنون که جواب دادید ممکنه یه نمونه خیلی ساده و ابتدایی هم بزنید


0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users