mvc با یک مثال ساده(قسمت اول) yii

mvc با یک مثال ساده(قسمت اول) yii

 

توی این جلسه می خوایم mvc رو با یه مثال ساده توضیح بدیم.

روال کار به این صورته که یه جدول  توی دیتابیسمون می سازیم .

به کمک gii مدل و کنترلر  و ویو هامونو می سازیم .

بعد  از اکشن های کنترلرمون عملیات  درج , ویرایش , حذف و نمایش رو انجام میدیم. همون عملیات crud خودمون.

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

ستون های  این جدولم شامل id,first_name,last_name,email,password,status هست

خوب شناسمون که باید کلید اصلی باشه و اتو اینکریمنت , نام و نام خانوادگیه کاربر , یه ایمیل ورمز عبور و در نهایت وضعیت کاربر برای فعال سازی کاربران .

اولین کار قبل از هر کاری ما پروژمونو به دیتابیسمون وصل میکنیم.

توی فولدر protected به فولدر کانفیگconfig میریم . فایل  database.php  رو که باز کنید.

میتونین  اطلاعاتتونو وارد کنین.

 

mvc با یک مثال ساده(قسمت اول) yii

 

تنظیمات اولیه به صورت کامنت هست که وقتی تنظیماتو انجام میدیم به این شکل میشه .

آموزش فریمورک یی آموزش فریم ورک یی فریمورک یی فریم ورک یی فریمورکyii فریم ورک yii yiiframework yii framework

خوب حالا میریم جدولو ایجاد کنیم.


CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL,
`email` varchar(250) DEFAULT NULL,
`password` varchar(250) DEFAULT NULL,
`first_name` varchar(250) DEFAULT NULL,
`last_name` varchar(250) DEFAULT NULL,
`status` int(11) DEFAULT '1'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `user`
ADD PRIMARY KEY (`id`), ADD KEY `id` (`id`);
ALTER TABLE `user`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

خوب جدولمونو ساختیم.

mvc با یک مثال ساده(قسمت اول) yii
میریم که با gii اشنا بشیم.
gii ابزاریه که فریم ورک یی فراهم کرده تا با اون بتونین به راحتی مدل ها و کنترلر هاتونو ایجاد کنین.
پس از ایجاد مدل شما میتونین به وسیله ی gii برای مدل هاتون کنترلر ایجاد کنین
که به صورت پیش فرض اکشن های حذف و ویرایش و ثبت و مدیریت داده هاتونو داره .
خوب برای فعال سازی gii باید توی فولدر config فایل main.php رو باز بکنین و اونو از حالت کامنت در بیارین . خط شماره ۲۴
نکته اینکه برای ورود به gii باید یه رمز عبور تعیین کنین.

آموزش فریمورک یی آموزش فریم ورک یی فریمورک یی فریم ورک یی فریمورکyii فریم ورک yii yiiframework yii framework

برای ورود به gii باید توی مرور گرتون بعد از ایندکس بنویسین gii

http://localhost:1007/index.php?r=gii/default/login

در صفحه ای که باز میشه رمز عبوری که انتخاب کردینو وارد کنین تا وارد محیط gii بشین.

آموزش فریمورک یی آموزش فریم ورک یی فریمورک یی فریم ورک یی فریمورکyii فریم ورک yii yiiframework yii framework

 

پس از ورود باید این صفحه رو ببینید

آموزش فریمورک یی آموزش فریم ورک یی فریمورک یی فریم ورک یی فریمورکyii فریم ورک yii yiiframework yii framework

 

به gii خوش آمدید.

یه نکته ی امنیتی بگم

اینکه پس از اینکه پروژتون تکمیل شد و آپلود کردین  این  gii رو غیر فعال کنین که  مشکلی واستون پیش نیاد.

خوب اینجا  ۵ تا منو داریم که ما از ۳ تاش فعلا استفاده میکنیم.

اولینش : model generator

برای ایجاد مدل هامون

دوم: crud generator برای ایجاد کنترلر و اکشن های دیفالت یی

پس از  استفاده از این  منو سیستم ویو هاش رو هم ایجاد میکنه.

سوم: controller generator  برای ایجاد کنترلر دلخواه.

 

mvc با یک مثال ساده(قسمت اول) yii

 

mvc

خیلی ساده:  هرچی که مربوط به دیتابیس میشه : نام جدول : ریلیشن ها و .. میشه مدل M

هرچی که  قراره نمایش داده بشه میشه ویو V

هر چی که مدیریت میکنه بین این دوتارو میشه کنترلر C

مثلا شما میخواین کاربرای عضو سایتو  نمایش بدین : اطلاعات کجاست ؟ توی دیتابیس پس مدل میشه جدول کاربران

خوب میخوایم تعداد و اسامی را نمایش بدیم . پس یه کوئری میزنیم از

مدلمون که همون جدول کاربرانمونه اطلاعات بر میداریم  میفرستیم به یه جایی که نمایش بده .

این کوئری و فرستادنه میشه کنترلر و جایی که قرار نمایش بده میشه ویو .

بریم عملی  انجام بدیم تا ملتفت بشیم .

برای ساخت مدل روی منوی model generator  کلیک میکنیم.

آموزش فریمورک یی آموزش فریم ورک یی فریمورک یی فریم ورک یی فریمورکyii فریم ورک yii yiiframework yii framework

 

خیلی ساده table name میشه نام جدولی که میخواین  ازش مدل بسازین. اینجا من user وارد کردم

وقتی نام جدولو وارد کردین به صورت اتومات مدل رو سیستم میسازه

توجه داشته باشین که مدل باید حرف اولش با حرف بزرگ نوشته بشه.

مدل ما شد User

خوب روی دکمه ی preview رو بزنین و سپس generate رو کلیک کنین.

مدلتون ایجاد شد.

mvc با یک مثال ساده(قسمت اول) yii

 

یه نگاه به فولدر مدلتون بکنین.

 

آموزش فریمورک یی, آموزش فریم ورک یی, فریمورک یی, فریم ورک یی, فریمورکyii, فریم ورک yii, yiiframework, yii framework,

<?php

/**
 * This is the model class for table "address".
 *
 * The followings are the available columns in table 'address':
 * @property integer $id
 * @property string $sender
 * @property string $receiver
 * @property string $phone
 * @property string $code
 * @property string $content
 * @property string $start_date
 * @property integer $is_deleted
 * @property integer $status
 */
class Address extends CActiveRecord {

    public $username;
    public $password;

    /**
     * @return string the associated database table name
     */
    public function tableName() {
        return 'address';
    }

    /**
     * @return array validation rules for model attributes.
     */
    public function rules() {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('type_address,factor,user_id', 'required', 'on' => 'admincrete'),
            array('content,productdesc,phone,receiver,sender', 'required', 'on' => 'usercreate'),
              array('productdesc,morakhas', 'required', 'on' => 'usercreate2'),
//            array(
//                'receiver,sender',
//                'match', 'pattern' => '^[آابپتثجچحخدذرزژسشصضطظعغفق  کگلمنوهی]+$',
//                'message' => 'فرستنده وگیرنده فقط به حروف یاید وارد شوند    ',
//                 'on' => 'usercreate'
//            ),
            // array('sender,phone,receiver,factor,content', 'required'),
            array('factor', 'required', 'on' => 'factor'),
            //array('factor', 'unique', 'on' => 'factor','message'=>' {attribute}"{value}" قبلا ثبت شده است.'),
            array('username,password', 'required', 'on' => 'usernamepass'),
            array('is_deleted,phone, status', 'numerical', 'integerOnly' => true, 'message' => '  {attribute}  را به عدد وارد نمایید'),
            array('content, start_date  ,productdesc, productqty,productweight,productfee', 'safe'),
            array('id, morakhas,sender, receiver, phone,user_id factor, content, submit_date, is_deleted, status', 'safe', 'on' => 'search'),
        );
    }

    /**
     * @return array relational rules.
     */
    public function relations() {

        return array(
            'user' => array(self::BELONGS_TO, 'User', 'user_id'),
        );
    }

    /**
     * @return array customized attribute labels (name=>label)
     */
    public function attributeLabels() {
        return array(
            'id' => 'شناسه',
            'admin_id' => 'ارسال کننده',
            'sender' => 'فرستنده',
            'receiver' => 'گیرنده',
            'user_id' => 'کاربر',
            'phone' => 'تلفن جهت هماهنگی',
            'factor' => 'کد',
            'content' => 'آدرس حمل',
            'submit_date_m' => 'تاریخ ثبت مدیر',
            'submit_date' => 'تاریخ ارسال کاربر',
            'is_deleted' => 'Is Deleted',
            'status' => 'وضعیت',
            'extra_content' => 'توضیحات',
            'productdesc' => 'شرح خرید',
            'productqty' => 'تعداد محصول',
            'productweight' => 'وزن محصول',
            'productfee' => 'فی محصول',
            'username' => 'نام کاربری',
            'password' => 'رمز عبور',
            'morakhas' => 'مرخص شده به نام',
            'type_address' => 'نوع آدرس',
        );
    }

    public function search($param = array()) {
        // @todo Please modify the following code to remove attributes that should not be searched.

        $criteria = new CDbCriteria($param);
        $criteria->with = array('user');
        $criteria->compare('t.id', $this->id);
          $criteria->compare('t.is_deleted', $this->is_deleted);
        $criteria->compare('user.last_name', $this->user_id, true);
        $criteria->compare('t.sender', $this->sender, true);
        $criteria->compare('t.receiver', $this->receiver, true);
        $criteria->compare('t.phone', $this->phone, true);
        $criteria->compare('t.factor', $this->factor);
        $criteria->compare('t.content', $this->content, true);
        $criteria->compare('t.submit_date', $this->submit_date, true);
        $criteria->compare('t.is_deleted', $this->is_deleted);
        $criteria->compare('t.productdesc', $this->productdesc);
        $criteria->compare('t.productqty', $this->productqty, true);
        $criteria->compare('t.productweight', $this->productweight);
        $criteria->compare('t.productfee', $this->productfee);
        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
        ));
    }

    /**
     * Returns the static model of the specified AR class.
     * Please note that you should have this exact method in all your CActiveRecord descendants!
     * @param string $className active record class name.
     * @return Address the static model class
     */
    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

}

حالا میریم که crud بسازیم به وسیله ی crud generator

ابتدا باید اسم مدلی که توی مرحله ی قبل ایجاد کردیم رو توی model class وارد کنیم.

بعدش اسم کنترلرمونو انتخاب کنیم اینجا  user

سپس preview  و در نهایت generate

مانند شکل زیر ک
آموزش فریمورک یی, آموزش فریم ورک یی, فریمورک یی, فریم ورک یی, فریمورکyii, فریم ورک yii, yiiframework, yii framework,

 

پس از این کار سیستم در فولدر کنترلر , userController را ایجاد میکنه

همچنین در فولدر ویو فولدری به اسم user ایجاد میکنه که شامل ویو هایی هست که توی تصویر میبینین.

 

آموزش فریمورک یی, آموزش فریم ورک یی, فریمورک یی, فریم ورک یی, فریمورکyii, فریم ورک yii, yiiframework, yii framework,

 

توی جلسه ی بعد این بحث رو ادامه خواهیم داد .

با تشکر  . موفق باشین