ساخت behavior در فریمورک Yii
در این مقاله، فرض کنید ما می خواهیم یک behavior ایجاد کنیم که property با نام name را به حروف بزرگ تبدیل کند(uppercase).این property متعلق به component ی است که behavior به آن متصل شده است.
مرحله 1 - داخل پوشه components، یک فایل با نام UppercaseBehavior.php با کد زیر ایجاد کنید.
<?php
namespace app\components;
use yii\base\Behavior;
use yii\db\ActiveRecord;
class UppercaseBehavior extends Behavior {
public function events() {
return [
ActiveRecord::EVENT_BEFORE_VALIDATE => 'beforeValidate',
];
}
public function beforeValidate($event) {
$this->owner->name = strtoupper($this->owner->name);
}
}
?>
در کد بالا ما UppercaseBehavior را ایجاد نمودیم بطوریکه وقتی رویداد “beforeValidate” رخ می دهد، property با نام name را به حروف بزرگ تبدیل می کند(uppercase).
مرحله 2 - برای attach کردن این behavior به مدل MyUser، آن را به این شکل زیر ویرایش کنید.
<?php
namespace app\models;
use app\components\UppercaseBehavior;
use Yii;
/**
* This is the model class for table "user".
*
* @property integer $id
* @property string $name
* @property string $email
*/
class MyUser extends \yii\db\ActiveRecord {
public function behaviors() {
return [
// anonymous behavior, behavior class name only
UppercaseBehavior::className(),
];
}
/**
* @inheritdoc
*/
public static function tableName() {
return 'user';
}
/**
* @inheritdoc
*/
public function rules() {
return [
[['name', 'email'], 'string', 'max' => 255]
];
}
/**
* @inheritdoc
*/
public function attributeLabels() {
return [
'id' => 'ID',
'name' => 'Name',
'email' => 'Email',
];
}
}
?>
حال، هر زمان که user ی create یا update شود، پروپرتی name آن به حروف بزرگ تبدیل می شود.
مرحله 3 - تابع actionTestBehavior را به SiteController اضافه کنید.
public function actionTestBehavior() {
//creating a new user
$model = new MyUser();
$model->name = "John";
$model->email = "john@gmail.com";
if($model->save()){
var_dump(MyUser::find()->asArray()->all());
}
}
مرحله 4 – در مرورگر وب تان آدرس http://localhost:8080/index.php?r=site/test-behavior را تایپ کنید،همانطور که می بینید که پروپرتی name در مدل MyUser که اخیرا ایجاد شده است به حروف بزرگ تبدیل شده است(uppercase).
این فصل در یک نگاه:
…
سلام . پیشنهاد میکنم حتما دموی دوره رو مشاهده کنید درباره فریم ورک Yii: در پاسخ به سوالات : آیا این فریم ورک سریع است؟ آیا این یک فریم ورک امن است؟ آیا این یک فریم ورک حرفه ای است؟ آیا ا…این فصل در یک نگاه:
…
پیشنهاد میکنیم دمو دوره رو حتما مشاهده کنید با سلام خدمت دوستان عزیز . ابتدا عرض کنم که این دوره برای دوستانی آماده شده که میخوان وب اپلیکیشن های مدرنی رو طراحی بکنن و وارد بازار کار ط…