امروز:دوشنبه ,۱۳۹۷/۱۱/۲۹
Download http://bigtheme.net/joomla Free Templates Joomla! 3
Home / Yii1 / mvc با یک مثال ساده(قسمت دوم)
آموزش فریمورک یی, آموزش فریم ورک یی, فریمورک یی, فریم ورک یی, فریمورکyii, فریم ورک yii, yiiframework, yii framework,

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

خوب توی قسمت قبل ما به وسیله ی gii تونستیم اولین مدل و کنترلرمون به همراه ویو هاشو ایجاد کنیم. حالا می خوایم  به صورت عملی ببینیم چه اتفاقایی میوفته که یه ویو با استفاده از مدل و کنترلر در سایت به نمایش میاد.

اول میریم سراغ کنترلر usercontroller

ابتدای صفحه  کد های زیر و داریم که ما فعلا باهاشون کاری نداریم. به وقتش توضیح میدیم اینا چی هستن.

 


public $layout='//layouts/column2';
/**
* @return array action filters
*/
public function filters()
{
return array(
'accessControl', // perform access control for CRUD operations
'postOnly + delete', // we only allow deletion via POST request
);
}

چیزی که ما میخوایم صحبت کنیم الان بحث دسترسی ها به اکشنامونه. کد های زیرو ببینین


public function accessRules()
{
return array(
array('allow', // allow all users to perform 'index' and 'view' actions
'actions'=>array('index','view'),
'users'=>array('*'),
),
array('allow', // allow authenticated user to perform 'create' and 'update' actions
'actions'=>array('create','update'),
'users'=>array('@'),
),
array('allow', // allow admin user to perform 'admin' and 'delete' actions
'actions'=>array('admin','delete'),
'users'=>array('admin'),
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}

خوب ما توی کنترلرمون چندتا اکشن داریم. اسم اکشنامون :index,delete,update,create,view,admin هست.
خوب اینا هرکدوم یه دسترسی ای دارن به این معنی که کدوم اکشنارو کیا میتونن ببینن.

خوب کد بالا

یه آرایه داریم که داخلش ۴ آرایست.
نکته : اصطلاحات زیر برای سطح دسترسی هست که هرکدوم یه معنی و مفهوم دار:
* (ستاره) به این معنیه همه کاربران
@(اتساین) به معنیه کاربرایی که وارد سایت شدن . کاربرای لاگین شده.
admin همون مدیر سایته
در آینده نحوه ی نقش دادن به کاربرارو بررسی میکنیم و آموزش میدیم . اینطوری میتونین اکشناتون محدود به نقش هایی که دارین میکنین.
خوب اول میریم سراغ خط آخر (آرایه ی آخر )

array('deny', // deny all users
'users'=>array('*'),
),

خیلی راحت . داره میگه کیا اجازه ی دسترسی به همه اکشنا ندارن؟ deny به معنیه عدم دسترسی . جواب چی داده ؟ گفته * یعنی همه ی کاربرا.
در واقع میگه هیچ کس اجازه دسترسی به اکشنارو نداره مگر اینکه بهش دسترسی داده شده باش.

array('allow', // allow all users to perform 'index' and 'view' actions
'actions'=>array('index','view'),
'users'=>array('*'),
),

اینم داره میگه همه ی کاربرا به اکشن های view و index دسترسی دارن.

array('allow', // allow authenticated user to perform 'create' and 'update' actions
'actions'=>array('create','update'),
'users'=>array('@'),
),

عملیات ثبت و ویرایش فقط توسط کاربرانی که وارد سایت شدند امکان پذیره

array('allow', // allow admin user to perform 'admin' and 'delete' actions
'actions'=>array('admin','delete'),
'users'=>array('admin'),
),

و در آخر مدیریت سایت که در اکشن admin قرار داره و امکان حذف فقط و فقط توسط admin صورت میگیریه.
این از دسترسی ها .
خوب برای تنوع برین این آدرسو توی مرورگرتون بزنین:

http://localhost:1007/index.php?r=user/index

تصویری که مشاهده میکنین به این صورته : دقت کنین که اکشن index توسط تمام کاربران قابل مشاهده است.
 آموزش فریمورک یی, آموزش فریم ورک یی, فریمورک یی, فریم ورک یی, فریمورکyii, فریم ورک yii, yiiframework, yii framework,

این اکشن چه کار میکنه ؟
برای اینکه متوجه بشین ابتدا اکشن index رو میبینیم :

public function actionIndex()
{
$dataProvider=new CActiveDataProvider('User');
$this->render('index',array(
'dataProvider'=>$dataProvider,
));
}

خوب کد بالا ابتدا اومده به وسیله ی CActiveDataProvider اطلاعات موجود در مدل User را در متغییرdataProvider میریزه و سپس به ویو ی index ارسال میکنه.

CActiveDataProvider چیست؟ کلاسیه که از طریق اون تمام اطلاعات موجود در مدل را (اطلاعات موجود در دیتابیس) را میخونه و در آبجکت ذخیره میکنه.

$this->render

هم که قبلا توضیح دادیم. پارامتر هاییو ارسال میکنه به ویو .
پس ما در این اکشن چی کار میکنیم؟ داده هارو میریزیم توی متغییر و میفرستیم به ویو . به همین راحتی.
دیگه نمیخوایم کوئری بزنیم و اطلاعات رو بخونیم به وسیله ی CActiveDataProvider .
خوب چون ما الان دیتایی نداریم چیزی نشون نمیده . میزنه No results found.
حالا فکر کن اگه دستی میخواستیم کوئری بزنیم باید یه کوئری میزدیم بخونیم از دیتابیس بعد چک کنیم که آیا خالی هست یا نه اگه خالی بود این کارو کن اگه نبود اون کارو
بگذریم. بریم ببینیم توی ویو چه کاری انجام شده .
برای نمایش ویو کجا میرفتیم؟
فولدر views فولدر user فایل index

<?php
/* @var $this AddressController */
/* @var $dataProvider CActiveDataProvider */

$this->breadcrumbs=array(
	'Users',
);

$this->menu=array(
	array('label'=>'Create Address', 'url'=>array('create')),
	array('label'=>'Manage Address', 'url'=>array('admin')),
);
?>

<h1>Users</h1>

<?php $this->widget('zii.widgets.CListView', array(
	'dataProvider'=>$dataProvider,
	'itemView'=>'_view',
)); ?>

خوب توی فایل ایندکس اطلاعات دیتا مون نمایش داده میشه .
خط اول breadcrumbs
مسریابی سایت هست. که مشخص میکنه ما در کجا قرار داریم من متنش و به لیست کاربران تغییر میدم .
به جای Users مینویسم لیست کاربران.
خط بعدی قرار دادن منو برای دسترسی راحت تر هست. اینجا به اکشن ثبت و مدیریت لینک دادیم
که من اسم فارسیشونو مینویسم.
خط بعدی که خط مهمیه ماژول clistview هست . اطلاعاتی که با CActiveDataProvider استخراج میشرو برای نمایش میفرستیم به ماژول clistview این ماژول میاد اطلاعات رو به صورت اتوماتیک تفکیک میکنه و مثل حلقه ی for نمایش میده .

<?php $this->widget('zii.widgets.CListView', array(
	'dataProvider'=>$dataProvider,
	'itemView'=>'_view',
)); ?>

clistview اطلاعاتو از طریق متغییری که از اکشن ایندکس واسش ارسال کردیم dataProvider
توی صفتی که واسش تعریف شده با نام : dataProvider میریزه.
خوب این شد حلقه ی for مون. حالا اگه دقت کنین یه صفتی داره با نام itemView یعنی قالب نمایش اطلاعات رو میره از فایل _view میخونه.
در کنار فایل index.php یه فایل هست به نام _view.php

محتویاتشو ببینیم:

<?php
/* @var $this AddressController */
/* @var $data Address */
?>

<div class="view">

	<b><?php echo CHtml::encode($data->getAttributeLabel('id')); ?>:</b>
	<?php echo CHtml::link(CHtml::encode($data->id), array('view', 'id'=>$data->id)); ?>
	<br />

	<b><?php echo CHtml::encode($data->getAttributeLabel('sender')); ?>:</b>
	<?php echo CHtml::encode($data->sender); ?>
	<br />

	<b><?php echo CHtml::encode($data->getAttributeLabel('receiver')); ?>:</b>
	<?php echo CHtml::encode($data->receiver); ?>
	<br />

	<b><?php echo CHtml::encode($data->getAttributeLabel('phone')); ?>:</b>
	<?php echo CHtml::encode($data->phone); ?>
	<br />

	<b><?php echo CHtml::encode($data->getAttributeLabel('code')); ?>:</b>
	<?php echo CHtml::encode($data->code); ?>
	<br />

	<b><?php echo CHtml::encode($data->getAttributeLabel('content')); ?>:</b>
	<?php echo CHtml::encode($data->content); ?>
	<br />

	<b><?php echo CHtml::encode($data->getAttributeLabel('start_date')); ?>:</b>
	<?php echo CHtml::encode($data->start_date); ?>
	<br />

	<?php /*
	<b><?php echo CHtml::encode($data->getAttributeLabel('is_deleted')); ?>:</b>
	<?php echo CHtml::encode($data->is_deleted); ?>
	<br />

	<b><?php echo CHtml::encode($data->getAttributeLabel('status')); ?>:</b>
	<?php echo CHtml::encode($data->status); ?>
	<br />

	*/ ?>

</div>
$data->getAttributeLabel(‘id’) 

با این کد عنوان مدلتونو میخونه . همون نام ستون جدول دیتابیستون. توضیح و عملیش انتهای همین مطلب.
$data->id با data به مدلتون و با چیرایی که بعد از -> نوشته شده به ستون های جدول دیتابیستون که میشه همون اتریبیوتای مدلتون دسترسی دارین.
خوب حالا من دستی به دیتا بیسم یه اطلاعات اضافه میکنم.
 آموزش فریمورک یی, آموزش فریم ورک یی, فریمورک یی, فریم ورک یی, فریمورکyii, فریم ورک yii, yiiframework, yii framework,

خوب حالا آدرس زیرو بزنین:

http://localhost:1007/index.php?r=user/index

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

خوب حالا بریم سر مدل تا بهتون بگم attributes ها چین و ستون های جداولو چطوری میتونیم هندل کنیم.
مدلتونو از فولدر model باز کنین
کد زیر و نگاه کنین


public function attributeLabels()
{
return array(
'id' => 'ID',
'email' => 'Email',
'password' => 'Password',
'first_name' => 'First Name',
'last_name' => 'Last Name',
'status' => 'Status',
);
}

خوب متد attributeLabel ستون های جدولتونو نشون میده و یه نام واسش میزاره که با همون نام نمایش میده .
من attribute هامو اینطوری تغییر میدم. دوباره صفحه ی مرورگرتونو رفرش منین

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

متوجه شدین؟
جلسات بعدی با اکشنای دیگه در خدمتتونیم.
سوالی بود به paeize70.com@gmail.com ایمیل بزنین.

Check Also

متد findByAttributes

استفاده از متد findByAttributes() در yii1 یکی از متد های CActiveRecord متد findByAttributes می باشد …

پاسخ دهید

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