Yii - Membuat Acara
Di bab ini kita akan melihat cara membuat acara di Yii. Untuk menunjukkan peristiwa dalam aksi, kita membutuhkan data.
Mempersiapkan DB
Step 1- Buat database baru. Basis data dapat disiapkan dengan dua cara berikut.
Di terminal, jalankan mysql -u root –p
Buat database baru melalui CREATE DATABASE helloworld CHARACTER SET utf8 COLLATE utf8_general_ci;
Step 2 - Konfigurasi koneksi database di config/db.phpmengajukan. Konfigurasi berikut adalah untuk sistem yang digunakan saat ini.
<?php
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=helloworld',
'username' => 'vladimir',
'password' => '12345',
'charset' => 'utf8',
];
?>
Step 3 - Di dalam folder root run ./yii migrate/create test_table. Perintah ini akan membuat migrasi database untuk mengelola DB kita. File migrasi akan muncul dimigrations folder dari root proyek.
Step 4 - Ubah file migrasi (m160106_163154_test_table.php dalam kasus ini) dengan cara ini.
<?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", "[email protected]"],
["User2", "[email protected]"],
["User3", "[email protected]"],
["User4", "[email protected]"],
["User5", "[email protected]"],
["User6", "[email protected]"],
["User7", "[email protected]"],
["User8", "[email protected]"],
["User9", "[email protected]"],
["User10", "[email protected]"],
["User11", "[email protected]"],
]);
}
public function safeDown() {
$this->dropTable('user');
}
}
?>
Migrasi di atas menciptakan usertabel dengan bidang ini: id, nama, dan email. Itu juga menambahkan beberapa pengguna demo.
Step 5 - Di dalam akar proyek run ./yii migrate untuk menerapkan migrasi ke database.
Step 6 - Sekarang, kita perlu membuat model untuk file usermeja. Demi kesederhanaan, kami akan menggunakan fileGiialat pembuat kode. Buka iniurl: http://localhost:8080/index.php?r=gii. Kemudian, klik tombol "Start" di bawah header "Model generator". Isi Nama Tabel (“user”) dan Model Class (“MyUser”), klik tombol “Preview” dan terakhir, klik tombol “Generate”.

Model MyUser akan muncul di direktori model.
Buat Acara
Asumsikan kita ingin mengirim email ke admin setiap kali ada pengguna baru yang mendaftar di situs web kita.
Step 1 - Ubah models/MyUser.php mengajukan dengan cara ini.
<?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';
}
}
?>
Dalam kode di atas, kami mendefinisikan acara "pengguna baru". Kemudian, dalam metode init () kami melampirkansendMailToAdminberfungsi untuk acara "pengguna baru". Sekarang, kita perlu memicu acara ini.
Step 2 - Buat metode bernama actionTestEvent di SiteController.
public function actionTestEvent() {
$model = new MyUser();
$model->name = "John"; $model->email = "[email protected]";
if($model->save()) { $model->trigger(MyUser::EVENT_NEW_USER);
}
}
Pada kode di atas, kami membuat pengguna baru dan memicu peristiwa "pengguna baru".
Step 3 - Sekarang ketik http://localhost:8080/index.php?r=site/test-event, Anda akan melihat yang berikut ini.
