نحوه ساخت یک Event در فریمورک Yii
در این مقاله، چگونگی ایجاد یک event در فریمورک Yii را خواهید دید. ما برای نمایش event در action ها به data نیاز داریم.
آماده سازی DB
مرحله 1 - ایجاد یک پایگاه داده جدید: پایگاه داده را می توان به دو روش زیر ایجاد نمود:
- در ترمینال، دستور زیر را اجرا نمایید.
mysql -u root –p
- ایجاد یک پایگاه داده جدید از طریق دستورزیر:
CREATE DATABASE helloworld CHARACTER SET utf8 COLLATE utf8_general_ci؛
مرحله 2 - connection پایگاه داده را در فایل config/db.php پیکربندی کنید. تنظیمات زیر برای سیستم مورد استفاده کنونی می باشد.
<?php
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=helloworld',
'username' => 'vladimir',
'password' => '12345',
'charset' => 'utf8',
];
?>
مرحله 3 - داخل دایرکتوری ریشه، دستور ./yii migrate/create test_table را اجرا کنید. این فرمان یک database migration را برای مدیریت DB ایجاد می کند. فایل migration باید در پوشه migrations در ریشه پروژه قرار بگیرد.
مرحله 4 - فایل migration را (m160106_163154_test_table.php در مثال ما) به صورت زیر ویرایش کنید.
<?php
use yii\db\Schema;
use yii\db\Migration;
class m160106_163154_test_table extends Migration {
public function safeUp() {
$this->createTable("user", [
"id" => Schema::TYPE_PK,
"name" => Schema::TYPE_STRING,
"email" => Schema::TYPE_STRING,
]);
$this->batchInsert("user", ["name", "email"], [
["User1", "user1@gmail.com"],
["User2", "user2@gmail.com"],
["User3", "user3@gmail.com"],
["User4", "user4@gmail.com"],
["User5", "user5@gmail.com"],
["User6", "user6@gmail.com"],
["User7", "user7@gmail.com"],
["User8", "user8@gmail.com"],
["User9", "user9@gmail.com"],
["User10", "user10@gmail.com"],
["User11", "user11@gmail.com"],
]);
}
public function safeDown() {
$this->dropTable('user');
}
}
?>
migration بالا یک جدول به نام user با چنیین فیلدهایی ایجاد می کند: id, name, email. همچنین تعدادی user نیز به جدول مان اضافه می نماید.
مرحله 5 - داخل ریشه پروژه دستور ./yii migrate را اجرا کنید. تا migraton به Database مان اعمال شود.
مرحله 6 - حالا ما باید یک مدل برای جدول user مان ایجاد کنیم. برای سادگی کار، ما قصد داریم از ابزار تولید کد Gii استفاده کنیم.
این آدرس را باز کنید: url: http://localhost:8080/index.php?r=gii. سپس بر روی دکمه “Start” زیر هدر “Model generator” کلیک کنید. نام جدول را user و نام کلاسِ مدل را MyUser بگذارید، روی دکمه “Preview” کلیک کنید و در نهایت روی دکمه “Generate” کلیک نمایید.
مدل MyUser باید در دایرکتوری models ظاهر شود.
ساخت Event
فرض کنید ما می خواهیم، هر زمانی که یک کاربر جدید، در وب سایت ما ثبت نام می کند، یک ایمیل برای مدیر ارسال شود.
مرحله 1 - فایل models/MyUser.php را به صورت زیر ویرایش کنید.
<?php
namespace app\models;
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 {
const EVENT_NEW_USER = 'new-user';
public function init() {
// first parameter is the name of the event and second is the handler.
$this->on(self::EVENT_NEW_USER, [$this, 'sendMailToAdmin']);
}
/**
* @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',
];
}
public function sendMailToAdmin($event) {
echo 'mail sent to admin using the event';
}
}
?>
در کد بالا ما یک event به نام “new-user” تعریف کردیم. سپس در متد init() تابع sendMailToAdmin را به رویداد “new-user” اضافه می کنیم. اکنون ما باید این رویداد را اجرا کنیم.
مرحله 2 – متدی به نام actionTestEvent در SiteController ایجاد می کنیم.
public function actionTestEvent() {
$model = new MyUser();
$model->name = "John";
$model->email = "john@gmail.com";
if($model->save()) {
$model->trigger(MyUser::EVENT_NEW_USER);
}
}
در کد بالا، یک user جدید ایجاد می کنیم و رویداد “new-user”را اجرا می کنیم.
مرحله 3 - در آدرسبار مرورگر وب تان آدرس http://localhost:8080/index.php?r=site/test-event را وارد کنید، آنچه که مشاهده می کنید مطابق با تصویر زیر می باشد.
این فصل در یک نگاه:
…
سلام . پیشنهاد میکنم حتما دموی دوره رو مشاهده کنید درباره فریم ورک Yii: در پاسخ به سوالات : آیا این فریم ورک سریع است؟ آیا این یک فریم ورک امن است؟ آیا این یک فریم ورک حرفه ای است؟ آیا ا…این فصل در یک نگاه:
…
پیشنهاد میکنیم دمو دوره رو حتما مشاهده کنید با سلام خدمت دوستان عزیز . ابتدا عرض کنم که این دوره برای دوستانی آماده شده که میخوان وب اپلیکیشن های مدرنی رو طراحی بکنن و وارد بازار کار ط…